【Python学习之旅】---继承(类的相关知识)

#面向对象编程三大特性:集成、多态,封装
class Dad:
money=10
def __init__(self,name):
self.name=name

def da(self):
print('%s正在打儿子' %self.name)

class Son(Dad): #继承父辈,单继承
pass

print(Son.money) #可调用父类数据属性
s1=Son('陈宇霞')
print(s1.name)


#当类之间有很多相同属性,提取这些共同的功能做成基类,用继承
#当类之间有显著的不同,并且较小的类是较大的类所需的组件时,用组合

#接口继承:接口是一个函数,定义一个基类,把自己的方法定义成接口函数,如果有子类继承接口函数
#子类中必须实现接口函数中的方法功能
import abc
class All(metaclass=abc.ABCMeta):
@abc.abstractmethod #防止子类在未定义接口函数中的方法的时候,依旧能调用基类
def read(self):
pass #接口类可不实现内部逻辑,只是用来规范子类
def write(self):
pass

class Disk(All):
def read(self):
print('read disk')
def write(self):
print('write disk')

class Cdrom(All):
def read(self):
print('read cdrom')
def write(self):
pass

c1=Cdrom()

#类的继承分两种方式:经典式:深度优先。新式类:广式优先
#深度优先:F-->D-->B-->A 广式优先:F-->E-->C-->A 优先从左边开始找

class A:
# def test(self):
# print('A')
pass
class B(A):
# def test(self):
# print('B')

pass
class C(A):
# def test(self):
# print('C')
pass

class D(B):
# def test(self):
# print('D')
pass

class E(C):
# def test(self):
# print('E')
pass

class F(D,E):
# def test(self):
# print('F')
pass
f1=F()
# f1.test() #经典类:F->D->B->A-->E-->C

print(F.__mro__)

#F-->D->B-->E--->C--->A新式类
#注意:对于你定义的类,Python会计算出一个方法解析顺序(MRO)列表,这个列表就是一个简单的所有基类的线性顺序列表
#必须遵循以下原则:
#1.子类会优先于父类被检查
#2.多个父类会基于他们在列表中的顺序被检查
#3.如果对下一个类存在两个合法的选择,选择第一个类

 

 

猜你喜欢

转载自www.cnblogs.com/chenyuxia/p/12125379.html