美丽说网站案例分析,在哪里可以做公司网站,学室内设计好不好,网站页面相关产品链接怎么做Python 面向对象知识点补充
【一】Mixins机制
【1】概念
Mixins#xff1a;是一种在面向对象编程中#xff0c;通过组合多个类的特称来创建一个新类的技术核心机制#xff1a;就是在多继承的背景下尽可能地提升多继承的可读性通过命名规范来满足人的思维习惯#xff08;…Python 面向对象知识点补充
【一】Mixins机制
【1】概念
Mixins是一种在面向对象编程中通过组合多个类的特称来创建一个新类的技术核心机制就是在多继承的背景下尽可能地提升多继承的可读性通过命名规范来满足人的思维习惯什么是什么的关系
【2】代码
class PeaShooter:passclass ShootMixin:def shoot(self):print(I can shoot pea)class FirePeaShooter(ShootMixin, PeaShooter):pass
class IcePeaShooter(ShootMixin, PeaShooter):pass【3】解释
在这个例子中火焰豌豆射手和寒冰豌豆射手都实现了多继承不过他们继承的第一个类起名为ShootMixin而不是Shoot这不影响功能。只是告诉读代码的人这个类是一个Mixin类表示混入mix-in这种命名方式就是明确的告诉别人这个类作为功能添加到子类中而不是作为父类注意要点 这个类表示功能而不是某个物品一般以Mixin、able、ible为后缀责任单一即多个功能要写多个Mixin类父、子类中都需要这个功能时只放在父类里面不依赖于子类的实现子类即便没有继承这个Mixin类mIxin类也可以正常工作通常放在子类括号的左边当定义的Mixin类越多子类代码可读性越差不推荐继承的结构过于复杂
【二】abc模块
【1】概念
abc模块是python中的抽象基类模块它提供了一种机制来定义抽象基类以及在子类中强制实现特定的方法抽象基类是不能被实例化的类主要目的是作为其他类的基类强制子类实现指定的方法。
【2】代码
import abcclass RegisterLogin(metaclassabc.ABCMeta):abc.abstractmethoddef login(self):passabc.abstractmethoddef register(self):passclass BankSys(RegisterLogin):def login(self):passdef register(self):passby BankSys()
# 尝试实例化抽象基类
# a RegisterLogin() # 报错【3】解释
在父类中需要继承ABC类ABC类是抽象基类的基类使用**abstractmethod装饰器定义抽象方法**如果子类没有定义这个方法在实例化时会报错抽象基类实例化也会报错
【三】类的特殊属性
class Base1:pass
class Base2(Base1):pass
class Base3(Base2):passclass A(Base3, Base1):文档注释pass【1】__name__
获取类的名字字符串格式
print(A.__name__, type(A.__name__))
# A class str【2】__doc__
获取类的注释文档字符串格式
print(A.__doc__, type(A.__doc__))
# 文档注释 class str【3】__base__
获取类的第一个父类返回一个类
print(A.__base__, type(A.__base__))
# class __main__.Base3 class type【4】__bases__
获取类的所有父类仅第一层返回元组格式
print(A.__name__, type(A.__name__))
# A class str【5】__dict__
获取类的字典属性表示类的名称空间mappingproxy类型表示是一个映射试图保护类属性不被意外修改
print(A.__dict__, type(A.__dict__))
# {__module__: __main__, __doc__: 文档注释} class mappingproxyxxxxxxxxxx print(A.__dict__, type(A.__dict__))# {__module__: __main__, __doc__: 文档注释} class mappingproxyname__))# A class str【6】__module__
获取类定义所在的模块字符串格式
print(A.__module__, type(A.__module__))
# __main__ class str【7】__class__
获取对象所属的类名
a A()
print(a.__class__, type(a.__class__))
# class __main__.A class type【四】两个判断函数
isinstance(obj, cls) 判断obj是不是cls的实例 issubclass(sub, super) 判读sub是不是super的子类
class A:passclass B(A):passa A()
print(isinstance(a, A)) # True
print(isinstance(a, B)) # Falseprint(issubclass(B, A)) # True
print(issubclass(A, B)) # Falseprint(issubclass(A, object)) # True
print(issubclass(B, object)) # Trueisinstance()还可以用来判断类型
print(isinstance(1, float)) # False
print(type(1.1) int) # Falseprint(isinstance(1, str)) # True
print(type() str) # True【五】总结