Mixin
class Document:
def __init__(self,content):
self.t=content
def print(self):
print(self.t)
class Pdf(Document):pass
class PrintableMixin:
def print(self):
print('PrintableMixin {}'.format(self.t))
class PrintablePdf(PrintableMixin,Pdf,):pass
print(PrintablePdf.mro())
pdf=PrintablePdf('bnm\nuiop')
print(pdf.__dict__)
pdf.print()
class PrintableMixin:
def print(self):
print(self.content,"mixin")
class Document:
def __init__(self,content):
self.content=content
class Word(Document):pass
class Pdf(Document):pass
class PrintableWord(PrintableMixin,Word):pass
print(PrintableWord.__dict__)
print(PrintableWord.__mro__)
pw=PrintableWord('bnm')
pw.print()
class SuperPrintableMixin(PrintableMixin):
def print(self):
print('@'*30)
super().print()
print('~'*30)
class SuperprintablePdf(SuperPrintableMixin,Pdf):pass
print(SuperprintablePdf.__dict__)
print(SuperprintablePdf.mro())
spp=SuperprintablePdf('Super print Pdf')
spp.print()
Mixin:
本质上就是多继承实现的,体现是一种组合设计模式
在面向对象的设计中,一个复杂的类,往往需要很多功能,而这些功能有来自不同的类提供,这就需要很多类组合在一起
Mixin类使用原则
- Mixin类中,不应该显式出现__init__初始化方法
- Mixin类通常不能独立工作,因为它是混入别的类中增强部分功能
- Mixin类的祖先也应该是Mixin类
- 使用时,Mixin类通常在继承列表的第一个位置,例如class PrintableWord(PrintableMixin,Word):pass
- Mixin类和装饰器都可以使用,如果还需要继承就得使用Mixin类

浙公网安备 33010602011771号