第51天python学习继承 接口继承与归一化设计

# # 面向对象编程三大特性
# # 类的继承:单继承和多继承
# class Dad:
# "这个是父亲类"
# money=1000000#数据属性
# def __init__(self,name):#初始构造方法
# print("父亲")
# self.name=name
#
# def hit_son(self):#函数属性
# print("%s 正在打儿子"%self.name)
#
# class Son(Dad):#单继承,就是继承了一方属性
# money=10
#
# print(Dad.money)#当子类的属性名字和父类一样的,子类先找自己的,不会覆盖分类的
# s1=Son("轩辕黄帝")#实例化触发儿子类没有去父类找
# print(s1.money)#结果:父亲 10
#
# #子类可以继承了父类所有属性
# #子类自定义的属性名和父类重叠了,那子类会先找自己类的
#
#
# class Father:#定义父亲类
# pass
#
# class Mother:#定义母亲类
# pass
#
# class Sonclass(Father): #儿子继承父亲的类————叫单继承
# pass
#
# class Sonclass(Father,Mother): #儿子继承父亲 母亲的类————叫多继承
# pass

# 什么时候用继承:
#1、当类之间显著不同,并且较小的类是较大的类所需的组件时,用组合比较好:例如:学校 老师 学生 课程建立关系
#2、当类之间有很多相同功能,提前这些共同的功能做成基类,用继承比较好:例如人类 父亲 母亲 儿子 都有相同的属性,
# 为了避免重复提取出相同的属性搞个类

# 补充:代码尽量解耦合——》继承的用途:声明某个子类兼容与某基类,定义一个接口类,子类继承接口类,并且实现接口类中定义的方法


#接口继承:接口——》就是一个方法, 接口继承——》父类定义一个方法,但是父类不实现,但是子类继承父类这个方法就必须去实现这个方法

#例如:定义一个类,类包含硬盘的读和写 那么继承的类自己实现读和写的功能
#接口的继承实例,应用liunx概念一切皆为文件

#接口继承干的事情:定义一个父类,规定好子类必须实现的功能,但是父类不实现,只要父类定义的方法按摩子类必须去实现这个父类里面规定的方法怎么实现
# 例如下面子类父类规定了读 和 写,但是子类硬盘 、内存类 、 软盘类必须实现读和写是怎么实现的。

import abc #此模块的作用是限定子类必须有读和写2个方法,规范子类
class All_file(metaclass=abc.ABCMeta):#父类只是定义方法,但是没有实现具体的方法。父类必须使用这个参数:metaclass=abc.ABCMeta
@abc.abstractclassmethod#装饰器,下面的方法不用具体实现
def read(self):
pass

@abc.abstractclassmethod#装饰器,下面的方法不用具体实现
def write(self):
pass

class Disk(All_file):#硬盘类
def read(self):
print("form disk read")
def write(self):
print("form disk write")

class Men(All_file):#内存类
def read(self):
print("form Men read")

def write(self):
print("form Men write")

class Cdrom(All_file):#软盘类

def read(self):
print("form Cdrom write")

def write(self):
print("form Cdrom write")

m1=Men()
m1.read()
m1.write()


# 类的继承顺序:

# 终结解密:python到底如何实现继承的,对于你定义的每一个类python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有
# 基类的线性顺序列表

#python 3是新式类,默认继承objct的类,新式类默认是:广度优先
class A:
def test(self):
print("A")

class B(A):
def test(self):
print("B")

class C(A):
def test(self):
print("C")

class D(B):
def test(self):
print("B")

class E(C):
def test(self):
print("E")

class F(D):
def test(self):
print("F")

f1=F()
print(F.__mro__)
#查看列表顺序()MRO: 最终父类都是:object
# (<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)



posted on 2019-10-13 11:01  坚持是多么伟大的事情  阅读(122)  评论(0编辑  收藏  举报