python类或对象中的魔法属性
qingheluo2018-11-23清河洛525
对于一个类,python定义了许多可用的魔法属性,有些每个类都默认存在,有些需要用户手动定义。__doc__:类的文档信息,类的第一个逻辑行的字符串__name__:获取类的名称,只能使用Class.__name__,对象没有该属性__module__:类或者对象的所属的类所在模块__dict__:返回类的所有属性和属性值组成的字典,不包括继承来的属性和方法。__class__:获取实例对象的类(object.__class__),显示内容类似,使用类直接获取该属性ClassName.__class__,显示内容__bases__:获取指定类的所有直接父类(父类的父类不显示)组成的元组,...
对于一个类,python定义了许多可用的魔法属性,有些每个类都默认存在,有些需要用户手动定义。
__doc__
:类的文档信息,类的第一个逻辑行的字符串
__name__
:获取类的名称,只能使用Class.__name__
,对象没有该属性
__module__
:类或者对象的所属的类所在模块
__dict__
:返回类的所有属性和属性值组成的字典,不包括继承来的属性和方法。
__class__
:获取实例对象的类(object.__class__
),显示内容类似,使用类直接获取该属性ClassName.__class__
,显示内容
__bases__
:获取指定类的所有直接父类(父类的父类不显示)组成的元组,使用方法为类名.__bases__
__mro__
:显示指定类的所有父类继承脉络和继承顺序,假如这个指定的类不具有某些方法和属性,但与其有血统关系的类中具有这些属性和方法,则在访问这个类本身不具有的这些方法和属性时,会按照__mro__
显示出来的顺序一层一层向后查找,直到找到为止。
__slots__
:限制实例对象添加新的属性
__slots__=tuple('key1','key2',...)
使用一个元组传入所有允许新增的属性名
不得在类中定义元组中已有的同名的属性和方法
只对当前类的对象生效,对子类并不起作用
__all__
:限制模块导入的属性和方法
__all__=['属性或方法名']
将一个py文件作为模块导入时,某些方法可能只是用来做测试用的,不希望也不建议被导入
只有指定的属性或方法名可以被导入
__all__魔法方法只针对通过from xx import *这种导入方式有效
class A: ''' 这是类说明信息 ''' __slots__=('a','b','d','f') __all__=['set','get'] a=1 def __init__(self,b): self.b=b self.c=3 class B(A): pass class C: pass class D(B,C): pass class E(D): pass a=A(2) print(A.__dict__) {'__module__': '__main__', '__doc__': '这是类说明信息', '__slots__': ('b', 'c', 'd', 'f'), '__all__': ['set', 'get'], 'a': 1, '__init__': , 'b':, 'c': print(a.__class__) <class '__main__.A'> print(D.__bases__) (<class '__main__.B'>, <class '__main__.C'>) print(D.__mro__) (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.C'>, <class 'object'>), 'd': , 'f': }