class MyList(list):
def __init__(self,element_cls):
# 当你覆盖了init方法时
# 不要忘记调用super().init函数让父类完成原有的初始化操作
super().__init__()
self.element_cls = element_cls
def append(self, object):
# if isinstance(object,str) # 判断要存储的元素是否是指定类型
if object.__class__ == self.element_cls:
super().append(object)
else:
print("只能存储%s类型!" % self.element_cls.__name__)
问题:多继承时如果多个父类中出现了同名的属性/函数
# 你不能用眼睛去判断查找顺序 ,需要使用mro列表来查看真正的继承顺序
# 总结:super在访问父类属性时 是按照mro列表一层层往上找的,不太建议使用多继承
例:
class A:
# a = 1
pass
class B(A):
# a = 2
pass
class C(A):
# a = 3
pass
class D(A):
# a = 4
pass
class E(B,C,D):
# a = 5
pass
e1 = E()
# print(e1.a)
# E B C D A object
#
# E B A C D
# print(E.mro())
class PC:
def open_app(self,app_name):
print("open %s" % app_name)
class OldBoyStudent:
def __init__(self,PC,notebook):
self.PC = PC
self.notebook = notebook
pass
pc = PC()
notebook = PC()
stu = OldBoyStudent(pc,notebook)
# stu.PC.open_app("pycharm")
stu.notebook.open_app("pycharm")
class USB:
def open(self):
pass
def close(self):
pass
def work(self):
pass
import abc
class Test(metaclass=abc.ABCMeta):
@abc.abstractmethod
def say_hi(self):
pass
def info(self):
print("my class is Test")
class TT(Test):
def say_hi(self):
print("i am TT obj")
class PC():
def conntent_device(self, usb_device):
usb_device.open()
usb_device.work()
usb_device.close()
class Mouse:
# 实现接口规定的所有功能
def open(self):
print("mouse opened")
def work(self):
print("mouse working...")
def close(self):
print("mouse closed")
mouse = Mouse()
pc = PC()
pc.conntent_device(mouse)