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