类的继承

# 继承:子类继承父类的数据属性和函数属性,但要注意继承并不是将属性赋值到子类中,子类的字典没有父类的属性,而是到父类里找
    #查找顺序:先在自己的属性里寻找,没有时再到父类中寻找
class Parentclass1:
    pass
class Parentclass2:
    pass
class Subclass1(Parentclass1):        #单继承
    pass
class Subclass2(Parentclass1,Parentclass2):        #多继承
    pass
继承分两种:继承基类的方法,将相同的属性提取出来做成一个父类,让子类继承,代码重用
接口类继承:声明某个子类兼容于基类,定义一个接口类,子类继承接口类
接口类规定需要使用某些方法(这些方法不用具体实现),子类继承接口类,必须单独制定这些方法的具体实现
实质是规定一个兼容接口,使得外部调用者无需关注具体细节,可以一视同仁的理实现特定接口的所有对象,
这种程序设计叫做归一化
子类里调用父类中的方法,在方法中添加 父类名.方法名(),例如:Fclass.__init__(self,name),注意括号里要添加self参数,自动传参只有在类实例化和对象调用类方法时才会自动
一般使用super().方法名,例如:super().__init__(name),不用传self参数
Python类可以继承多个类:遵循深度优先和广度优先,可以 .__mro__查看解析顺序列表
#接口类继承
import abc         #abc 接口类模块
class All_file(metaclass=abc.ABCMeta):     #设定接口类
    @abc.abstractclassmethod               #定义一个抽象方法,表示这个方法不能被实例化
    def read(self):                         # 子类继承这些被抽象化的方法,必须自己制定这些方法的具体实现
        pass
    @abc.abstractclassmethod
    def write(self):
        pass

class Disk(All_file):
    def read(self):
        print("disk read")
    def write(self):
        print("disk write")

class Cdroom(All_file):              #当继承接口类中被abstractclassmethod的方法时,必须实现这个规定的方法
    def read(self):
        print("cd read")
    def write(self):                 #接口类中定义了两个被抽象化的方法,子类中也必须有这两个方法的具体实现
        print("cd write")
class A:
    pass
class B(A):
    pass
class C(A):
    pass
class D(B):
    pass
class E(C):
    pass
class F(D,E):
    pass
f1 = F()
#f1.test()       #F-->D--->B---->E--->C---->A  Python3 广度优先继承一般按照这个顺序查找
print(F.__mro__)     #pythond的方法解析顺序(mro)

 

 
posted @ 2019-05-08 00:30  saber゛  Views(216)  Comments(0)    收藏  举报