1.__doc__ :打印类的描述信息
class Foo: """ 描述类信息,这是用于看片的神奇 """ def func(self): pass print(Foo.__doc__) #>>>描述类信息,这是用于看片的神奇
2.__module__:表示当前操作的对象在那个模块
""" mymodule """ class C: def __init__(self): self.name = 'paul' """ ------- """ from mymodule.lib import C obj = C() print (obj.__module__) # 输出 lib.aa,即:输出模块 #>>>>mymodule.lib
3.__class__:表示当前操作的对象的类是什么
""" mymodule """ class C: def __init__(self): self.name = 'paul' """ ------- """ from mymodule.lib import C obj = C() print (obj.__class__) # 输出 lib.aa.C,即:输出类 #>>><class 'mymodule.lib.C'>
4. __init__ :构造方法,通过类创建对象时,自动触发执行
class Role(object): #初始化函数,在生成一个角色时要 初始化的一些属性就填写在这里 def __init__(self,name,role,weapon,life_value=100,money=15000): #__init__中的第一个参数self,和这里的self都 是什么意思? 看下面解释 self.name = name self.role = role
5.__del__:析构方法,当对象在内存中被释放时,自动触发执行
class Role(object): def __init__(self,name,role,weapon: self.name = name self.role = role self.weapon = weapon def __del__(self): #析构函数 print("del.....run...") r1 = Role('Alex','police','AK47') #生成一个角色
6.__call__:对象后面加括号,触发执行
class Foo: def __init__(self): pass def __call__(self, *args, **kwargs): print('__call__') obj = Foo() # 执行 __init__ obj() # 执行 __call__ #>>>__call__
class ClassA(object): def __new__(cls, *args, **kwargs): object = super(ClassA, cls).__new__(cls) print("HHHA:0===>") return object def __init__(self, *args, **kwargs): print("HHHB:0===>") def __call__(self, func): print("HHHC:0===>") return func A = ClassA() print("HHHH:0====>") @ClassA() def hello(): print("HHHC:0===>hello") print("HHHH:1====>") hello() #>>>HHHA:0===> #>>>HHHB:0===> #>>>HHHH:0====> #>>>HHHA:0===> #>>>HHHB:0===> #>>>HHHC:0===> #>>>HHHH:1====> #>>>HHHC:0===>hello
7.__dict__:查看类或对象中的所有成员
print(类.__dict__) # 打印类里所有属性,不包括实例属性 print(实例.__dict__) #打印实例所有属性,不包括类属性
8.__str__:如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
class Foo: def __str__(self): return 'paul' obj = Foo() print(obj) #>>>paul
9.__getitem__、__setitem__、__delitem__:
注:用于索引操作,如字典。以上分别表示获取、设置、删除数据
class Foo(object): def __getitem__(self, key): print('__getitem__', key) def __setitem__(self, key, value): print('__setitem__', key, value) def __delitem__(self, key): print('__delitem__', key) obj = Foo() result = obj['k1'] # 自动触发执行 __getitem__ #>>>__getitem__ k1 obj['k2'] = 'alex' # 自动触发执行 __setitem__ #>>>__setitem__ k2 alex del obj['k1'] #>>>__delitem__ k1
10.类的生成 调用 顺序依次是 __new__ --> __init__ --> __call__
11.__len__,使用 len(object) 触发
class Foo: def __init__(self, name): self.name = name def __len__(self): return 10 # 注意返回结果必须是 int 类型 f = Foo('hkey') print(len(f)) #>>>10
12.__hash__,调用 hash(object) 触发
class Foo: def __init__(self): self.a = 1 self.b = 5 def __hash__(self): return hash(str(self.a) + str(self.b)) f = Foo() print(hash(f)) #>>>-3542141893081931293
13.__eq__,当两个对象进行比较时,触发
class Foo: def __init__(self): self.a = 1 self.b = 5 def __eq__(self, other): if self.a == other.a and self.b == other.b: return True return False a = Foo() b = Foo() print(a == b) # 执行这个比较的时候,就调用了 __eq__ 方法 #>>>True