Mixins:是一种在面向对象编程中,通过组合多个类的特称来创建一个新类的技术 核心机制 :就是在多继承 的背景下 尽可能地提升多继承的可读性 通过命名规范 来满足人的思维习惯(什么是什么的关系 ) class  PeaShooter : pass class  ShootMixin : def  shoot ( self) : print ( "I can shoot pea" ) class  FirePeaShooter ( ShootMixin,  PeaShooter) : pass 
class  IcePeaShooter ( ShootMixin,  PeaShooter) : pass 
在这个例子中火焰豌豆射手和寒冰豌豆射手都实现了多继承,不过他们继承的第一个类起名为ShootMixin,而不是Shoot,这不影响功能 。只是告诉读代码的人,这个类是一个Mixin类 ,表示混入 (mix-in),这种命名方式就是明确的告诉别人,这个类作为功能添加到子类中,而不是作为父类  注意要点 : 这个类表示功能,而不是某个物品  一般以Mixin、able、ible为后缀  责任单一,即多个功能要写多个Mixin类  父、子类中都需要这个功能时,只放在父类里面 不依赖于子类的实现;子类即便没有继承这个Mixin类,mIxin类也可以正常工作 通常放在子类括号的左边  当定义的Mixin类越多,子类代码可读性越差,不推荐继承的结构过于复杂  abc模块 是python中的抽象基类模块 ,它提供了一种机制来定义抽象基类以及在子类中强制实现特定的方法 抽象基类 是不能被实例化的类 ,主要目的是作为其他类的基类 ,强制子类实现指定的方法 。import  abcclass  RegisterLogin ( metaclass= abc. ABCMeta) : @abc. abstractmethod def  login ( self) : pass @abc. abstractmethod def  register ( self) : pass class  BankSys ( RegisterLogin) : def  login ( self) : pass def  register ( self) : pass by =  BankSys( )  
在父类中需要继承ABC类 (ABC类是抽象基类`的基类) 使用**@abstractmethod装饰器定义抽象方法** 如果 子类没有定义 这个方法,在实例化时会报错 抽象基类实例化也会报错 class  Base1 : pass 
class  Base2 ( Base1) : pass 
class  Base3 ( Base2) : pass class  A ( Base3,  Base1) : """文档注释""" pass 
__name__print ( A. __name__,  type ( A. __name__) ) 
__doc__print ( A. __doc__,  type ( A. __doc__) ) 
__base__print ( A. __base__,  type ( A. __base__) ) 
__bases__print ( A. __name__,  type ( A. __name__) ) 
__dict__获取类的字典属性,表示类的名称空间 mappingproxy类型,表示是一个映射试图,保护类属性不被意外修改print ( A. __dict__,  type ( A. __dict__) ) 
__module__print ( A. __module__,  type ( A. __module__) ) 
__class__a =  A( ) 
print ( a. __class__,  type ( a. __class__) ) 
isinstance(obj, cls)  issubclass(sub, super)  class  A : pass class  B ( A) : pass a =  A( ) 
print ( isinstance ( a,  A) )  
print ( isinstance ( a,  B) )  print ( issubclass ( B,  A) )  
print ( issubclass ( A,  B) )  print ( issubclass ( A,  object ) )  
print ( issubclass ( B,  object ) )  
print ( isinstance ( 1 ,  float ) )  
print ( type ( 1.1 )  ==  int )  print ( isinstance ( "1" ,  str ) )  
print ( type ( "" )  ==  str )