一
、接口类
python
没有接口的概念,只能借助抽象类的模块 来实现接口类
接口类:(多继承,父类不实现)
①是规范子类的一个模板,只要接口类中定义的,就应该在子类中实现
②接口类不能被实例化
,
它只能被继承
③支持多继承,鼓励多继承
一开始的小代码:
class Payment:
def pay(self,money):pass # 不实现
class Apple_Pay(Payment):
def pay(self,money):
print('您使用苹果支付支付了%s元'%money)
标准小代码:
(就是引发了异常,如果子类没实现接口的方法或方法名错误,则一实例化就报错)
from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta): #模板,接口类
@abstractmethod #装饰接口类中方法的,加上这个装饰器,自动检测子类中的方法名
def pay(self,money):pass
@abstractmethod
def get(self):pass
class Apple_Pay(Payment):
def pay(self,money):
print('您使用苹果支付支付了%s元'%money)
.....................................
二、抽象类
抽象类:
①模板 规范
②抽象类可以实现一些子类共有的功能和属性
③不鼓励多继承
④抽象类不能被实例化
⑤必须让子类实现抽象类中的抽象方法
接口类在抽象类的基础上,少了实现方法,抽象类可以被实现
例:文件操作 :打开文件 关闭文件 写文件 读文件
from abc import ABCMeta,abstractmethod
class Base(metaclass=ABCMeta):
def __init__(self,filename):
self.filename = filename
@abstractmethod #抽象方法
def open(self):
return 'file_handler' # 呐,可以实现
@abstractmethod
def close(self):pass
class File(Base):
def open(self):pass
def close(self):pass
三、两个原则
依赖倒置原则:
高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程
接口隔离原则:
使用多个专门的接口,而不是用单一的总接口,即,客户端不应该以来那些不需要的接口
==============================================================================================================
面向对象
类 :一类具有相同属性和方法的事物
类的定义:class
类中可以定义的方法种类:
普通方法 self 对象
类方法 cls @classmethod类/对象
静态方法 @staticmethod类/对象
属性方法 self @property对象
私有方法 self __方法名 self/cls
类中可以定义的属性: 静态属性 类
对象:
实例化 : 类名()
创造对象
初始化对象 __init__
返回一个对象
对象的属性:
普通属性 对象
私有属性 __属性名 self
属性的操作
增 对象名.新属性名 = 值
删del对象名.属性名
改 对象名.属性名 = 新值
查 对象名.属性名
组合:
一个类的对象作为另一个类对象的属性;什么有什么
继承:
解决代码的复用,提取公共代码到父类;什么是什么
单继承和多继承
子类继承了父类除了私有的之外的所有属性和方法
子类执行方法的查找顺序:
经典类中:先找自己,自己没有找父类,遵循深度优先
新式类中:先找自己,自己没有找父类,遵循广度优先
子类执行父类的方法:
1.指名道姓 指到谁就是谁 父类名.父类中的方法名(self)
2.super只能在新式类中使用,且找的顺序是mro顺序super(子类名,子类对象名).方法名()
*** 抽象类和接口类
@abstractmethod
多态
python 天生多态
崇尚鸭子类型 : 不需要通过继承关系就实现对相似的功能
洁身自爱 -- 张先生