day25

继承的另一种方式

#在实际开发中,通常我们会继承已有的类,然后扩展新功能.
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:
   @abc.abstractmethod
   def write(self):
       pass
class B(A):
   def write(self):
       print('写......')
'''
抽象类:只能被继承,不能被实例化,有抽象方法(可以有非抽象方法)的类就是抽象类,抽象方法是没有方法体的方法
抽象类是从一堆类中抽取相同的内容而来,内容包括属性和方法
抽象类主要是为了强行限制继承(实现)接口但是却不实现接口内部的方法
当一个类在编写的时候遵循寻某个接口的规范,那么接口就没有了存在的意义,在python中完全可以不需要接口
'''


鸭子类型

#在python中,不会强行限制接口或者抽象类,所以有了鸭子类型.python中可以创建一个与原对象外观和行为一样,但是与原对象没有关系的新对象.
class A():
   def read(self):
       pass
   def write(self):
       pass
class B():
   def read(self):
       pass
   def write(self):
       pass
原文地址:https://www.cnblogs.com/zhuqihui/p/10883616.html