day 12 接口##

一,抽象类和接口类

    1  什么时抽象类:可以事项具体的某个功能,并且不知此多继承的这个父类就叫做抽象类

    2  什么时接口类:不是想具体的方法的并且推荐多继承的这个父类就叫做接口类

          抽象类和接口类都是为了定义子类的规范

    3 什么叫做归一化设计:创建一个函数来调用类里面的属性或方法,不需要(对象.方法())来调用,这种设计思想就叫做归一化设计。前提条件是几个类都实现相同的功能

    4 abc模块,用于接口类和抽象类中一个模块

       ABC是Abstract Base Class的缩写。

  abc.ABCMeta:由于生成抽象类和接口类的抽象方法和抽象属性,由他生成的类可以直接被继承。

  abc.abstractmethod:给父类的方法加上一个装饰器。

 接口类;

 1 # import abc
 2 # class Payment(metaclass=abc.ABCMeta):
 3 #     @abc.abstractmethod
 4 #     def payment(self哦,monry):pass
 5 # class Wei(Payment):
 6 #     def payment(self,monry):
 7 #         print('微信支付%s元'%monry)
 8 # class Zhi(Payment):
 9 #     def fuqian(self,monry):
10 #         print('支付宝支付%s元'%monry)
11 # def payment(suixiang,monry):
12 #     suixiang.payment(monry)
13 # d1=Wei()
14 # payment(d1,100)
15 #
16 # d2=Zhi()       #报错
17 # payment(d2,200)   #报错

 如果在子类中没有和接口类相同的方法,只要创建该子类对象就会报错

 

 抽象类:

# import abc
# class Payment(metaclass=abc.ABCMeta):
#     @abc.abstractmethod
#     def payment(self,money):
#         print('支付了%s元'%(money))
# class Wei(Payment):
#     def payment(self,monry):
#         super().payment(monry)
# class Zhi(Payment):
#     def pay_ment(self,money):
#         pass
# def payment(self,money):
#     self.payment(money)
# w1=Wei()
# payment(w1,100)
#
# z1=Zhi()
# payment(z1,200)

 多继承一般情况下不用,但是可以在接口类的情况下使用

# from abc import ABCMeta,abstractmethod
# class Fly_animal(metaclass=ABCMeta):
#     @abstractmethod
#     def fly(self):pass
# class Walk_animal(metaclass=ABCMeta):
#     @abstractmethod
#     def walk(self):pass
# class Swim_animal(metaclass=ABCMeta):
#     @abstractmethod
#     def swim(self):pass
# class Tiger(Walk_animal,Swim_animal):
#     def walk(self):print('%s is walking'%self)
#     def swim(self):print('%s is swiming'%self)
# class Frog(Walk_animal,Swim_animal):
#     def walk(self):print('%s is walking'%self)
#     def swim(self):print('%s is swiming'%self)
# class Swan(Fly_animal,Walk_animal,Swim_animal):
#     def walk(self):print('%s is walking'%self)
#     def swim(self):print('%s is swiming'%self)
#     def fly(self):print('%s is flying'%self)
# t1=Tiger()
# t1.walk()
# f1=Frog()
# f1.swim()
# s1=Swan()
# s1.fly()

 依赖倒置原则:高层的模块应该不依赖于底层模块;二者都应该依赖于抽象;抽象不应该依赖于细节;细节应该依赖于抽象;

                          换言之;要针对接口编程,而不是针对实现编程

接口隔离原则:使用多个专门的接口,而不是使用单一的总接口,即客户端应该不依赖于那些不需要的接口

二 新式类和经典类

    1  python中分为新式类和经典类

              在python2 中定义经典类, class   父类名:

              在python2 中定义新式类,class   父类名(object):

 object是所有类的基类。

  新式类和经典类在继承的顺序上的不同:在新式类中属于官渡优先;在经典类中属于深度优先。

  什么叫深度优先:

在经典类中,从左到右每个分支查找到底,在进行下一个分支的查找,如果有共同的父类,在查找的第一个分支,就会查找到这个共同的父类,然后在进行下一个分支的查找,在后面查找是不会在去查找他们共同的父类。

  什么叫广度优先:

在新式类中,从左到右每个分支查找完毕到他们的共同父类下的子类后,在去查找下一条分支,直到共同父类下的分组查找完毕过后,最后在查找他们共同的父类。

##   mro()可以查看寻找的顺序,经典类中不能使用:

# class A:
#     def func(self):
#         print('A')
# class B(A):
#     def func(self):
#         print('B')
# class C(B):
#     def func(self):
#         print('C')
# class D(A):
#     def func(self):
#         print('D')
# class E(D):
#     def func(self):
#         print('E')
# class F(A):
#     def func(self):
#         print('F')
# class G(F):
#     def func(self):
#         print('G')
# class H(C,E,G):
#     def func(self):
#         print('H')
# h=H()
# h.func()
# print(H.mro())

  调用经典类:父类名(子类名,对象).功能或者方法。调用是需要传入两个参数,一个是子类名,一个是对象

  调用新式类:父类名().功能或者方法。父类可以不需要传入参数。

 在python3 中只有新式类,而没有经典类。

三 多态

 什么是多态:一种事物的多种形态叫做多态,这里指的是一个参数的多种形态

 python是自带多态的

 什么是多态性:在python中一个参数可以使用多种数据类型,就叫做多态性

 鸭子类型:在各种数据类型之间他们没有任何的联系,但是他们拥有着一些共同的属性或者功能,这就叫做鸭子类型。

 

转载于:https://www.cnblogs.com/ez2z/p/7561797.html

### 苍穹外卖 Day12 学习内容概述 在苍穹外卖项目的第十二天学习中,主要涉及的内容可能围绕订单管理系统的优化以及功能扩展展开。虽然具体的学习内容未完全提及,但从之前的日志来看[^1],可以推测这一天的重点可能是进一步完善订单状态的处理逻辑、来电提醒机制或者客户催单的功能实现。 #### 可能的技术点分析 以下是基于前几日学习内容推断出的一些技术要点: 1. **Spring Task 的深入应用** 如果继续沿用 `Spring Task` 进行定时任务开发,则可能会涉及到更复杂的场景,比如多线程环境下的任务调度或分布式环境下的一致性问题。 2. **Controller 层接口设计** 前期提到过通过 Controller 调用 List 方法来完成特定数据查询操作[^2]。因此,在 Day12 中或许会新增一些 API 接口用于支持新的业务需求,例如分页查询订单详情或其他关联表的数据。 3. **Paging Helper 配置使用** 关于分页插件 PageHelper 的引入已经在 pom 文件中有体现[^3]。这表明项目中存在大量列表展示的需求,而这些需求通常伴随着性能考量和用户体验提升的要求。所以本阶段应该会对该工具的应用做更多实践探索。 4. **异常处理机制改进** 微信登录过程中关于 openid 是否为空的校验说明了全局异常处理器的重要性[^4]。随着系统复杂度增加,如何优雅地捕获并反馈各种运行时错误成为了一个不可忽视的话题。 ```java // 示例代码片段:假设这是某部分增强版的订单状态更新服务类 @Service public class OrderService { @Autowired private OrderMapper orderMapper; /** * 更新超时未支付订单的状态为已取消 */ @Scheduled(cron = "0 0/5 * * * ?") // 每隔五分钟执行一次 public void cancelUnpaidOrders(){ try{ int affectedRows = orderMapper.updateStatusForTimeoutOrders(); log.info("{} orders have been cancelled due to timeout.",affectedRows); }catch(Exception e){ throw new RuntimeException("Failed to process unpaid orders",e); } } } ``` 以上仅为猜测性质的服务端伪代码示例,实际编码需依据真实业务场景调整参数设置及事务控制策略等内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值