继承的另一种方式 #在实际开发中,通常我们会继承已有的类,然后扩展新功能. class A: def test( self): print( ‘from A‘) super(). test() #应该报错....但是却执行成功 ? class B: def test( self): print( ‘
#在实际开发中,通常我们会继承已有的类,然后扩展新功能.
class A:
def test(self):
print(‘from A‘)
super().test() #应该报错....但是却执行成功
?
class B:
def test(self):
print(‘from B‘)
?
class C(A,B):
pass
?
c = C()
c.test()
?
#组合:一个类把另一个类的对象作为自己的属性,就称之为组合
#组合是什么有什么的关系
class A:
pass
class B:
def __intit__(self,A)
self.A = A
a = A()
b = B(a)
super()问题,mro列表
#python支持多继承,继承顺序(属性的查找顺序)按照mro列表一个个找
#可以通过对象点出一个mro的函数,这个函数会返回一个列表,列表里有这个类的所有父类
?
?
菱形继承问题
#菱形继承
#python2中的概念:经典类:没有继承objcet类的类 新式类:直接或者间接的继承了objcet类的类
#经典类:如果出现了菱形继承,查找顺序是深度优先
?
?
#新式类:由C3算法来确定继承顺序,先深度后广度
接口和抽象类
‘‘‘
在程序中,功能通常用函数来表示,对于外界而言,无需清楚函数如何实现的,只需要知道这个函数名称
即可,这个函数名称成为接口
接口的意义在于归一化,归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合
?
‘‘‘
import abc
class A:
鸭子类型
#在python中,不会强行限制接口或者抽象类,所以有了鸭子类型.python中可以创建一个与原对象外观和行为一样,但是与原对象没有关系的新对象.
class A():
def read(self):
pass
def write(self):
pass
class B():
def read(self):
pass
def write(self):
pass
?