1.接口实现
python中并没有提供专门的接口类型,只能自己定义一个接口类
# python中没有接口,只能自己实现
class Interface:
def func1(self):
pass
def func2(self):
pass
class Test(Interface):
def func1(self):
print('重写了func1')
def func2(self):
print('重写了func2')
def func3(self):
print('新加入了func3')
if __name__ == '__main__':
a = Test()
a.func1()
a.func2()
a.func3()
2.抽象类
借助python中的abc模块来实现抽象类
抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化
类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性
抽象类中的抽象方法必须在继承的子类中全部重写
不然会报错:Can't instantiate abstract class Test with abstract methods *函数名
import abc
# 抽象类中既可以有普通函数,也可以有抽象函数,需要使用标记指出
class MyAbstract(metaclass=abc.ABCMeta):
name = 'dzzhyk'
def func1(self):
print('这是普通方法func1')
@abc.abstractmethod
def func2(self):
pass
@abc.abstractmethod
def func3(self):
pass
class Test(MyAbstract):
def func2(self):
print('重写了抽象方法func2')
def func3(self):
print('重写了抽象方法func3')
if __name__ == '__main__':
a = Test()
a.func2()
a.func3()
# func1是抽象类中定义的普通方法,也可以在继承的类中正常使用
a.func1()
print(a.name)
metaclass:元类,所有的class默认都继承于元类,默认是type
3.抽象类和接口
抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如name)和函数属性(如func1、func2),而接口只强调函数属性的相似性。
抽象类是一个介于类和接口之间的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计
4.经典类和新式类
python2中才区分经典类和新式类,python3中统一都是新式类
python中的类可以继承多个类,搜寻类的方法主要有深度优先和广度优先两种
经典类和新式类的区别主要在于:
- 经典类:多继承的条件下,会使用深度优先进行查找
- 新式类:多继承的条件下,会使用广度优先进行查找
如果一个类继承了object,这个类就是新式类
class MyClass(object):
pass
参考:
抽象类:
https://blog.csdn.net/DeepOscar/article/details/80802984
metaclass:
https://www.cnblogs.com/xybaby/p/7927407.html
https://stackoverflow.com/questions/100003/what-are-metaclasses-in-python
python中abc模块:
https://www.cnblogs.com/wancy86/p/6269553.html?utm_source=itdadao&utm_medium=referral
python接口: