面向对象中除了__init__之外还有很多特殊方法
1.__init__ :数据初始化,当类名()进行调用的时候会自动执行
class ms(object):
def __init__(self,a1,a2):
self.a1=a1
self.a2 = a2
obj = ms(12,34)
2.__call__:对象() 自动执行 __call__,有返回值
class ms(object):
def __call__(self, *args, **kwargs):
print(666,args,kwargs)
return 123
ret = obj(2,3,4,k=234)
<<<<
666 (2, 3, 4) {'k': 234}
3.__getitem__ / __setitme__ / __delitme__
主要用于索引操作
class ms(object):
def __getitem__(self, item): # 获取
print(item)
return 8
def __setitem__(self, key, value): #设置
print(key,value,1234)
def __delitem__(self, key): # 删除
print(key)
obj = ms(1,2)
ret = obj["666"] #对象["..."] 自动执行
obj["k1"]="123" # 对象[" "]=11 自动执行 无返回值
del obj["123"] # del 对象[' '] 自动执行 无返回值
6.__add__ 对象+对象
class ms(object):
def __init__(self,a1,a2):
self.a1=a1
self.a2 = a2
def __add__(self, other):
return self.a1 + other.a2
obj1 = ms(2,4)
obj2 = ms(44,55)
ret = obj1+obj2 # 对象+对象 自动执行
print(ret)
<<<<57
7.__enter__ 和 __exit__
class ms(object):
def __enter__(self):
print(111)
return 999
def __exit__(self, exc_type, exc_val, exc_tb):
print(222222)
#with 对象 自动执行 __enter__ / __exit__ 这两个要用就要一起用
with ms(2,3) as f: # 这里的as 接收的是返回值
print(f)
print(1234)
<<<<
111
999
1234
222222
8.__new__ : 真正的构造方法 在执行__init__ 之前会执行__new__创建一个空的对象
class ms(object):
def __init__(self,a1,a2): # 初始化方法
self.a1=a1
self.a2 = a2
def __new__(cls, *args, **kwargs): # 构造方法
print(2)
return object.__new__(cls) # python 内部创建一个当前类的对象(初创时内部是空的)
obj = ms(1,2)
print(obj.a1)
<<<<
2
1
9.__str__
class ms(object):
def __str__(self): 当一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
return "display"
obj = ms()
print(obj)
<<<
display
10.__doc__
用于查看类的文档信息(类的注释)
class foo(object):
"""
小兄弟,看你骨骼惊奇,可否一同练就python大法
"""
def func(self):
pass
print(foo.__doc__)
<<<<
小兄弟,看你骨骼惊奇,可否一同练就python大法
11.__dict__
查看类或对象里的所有成员
class foo(object):
county = "China"
def __init__(self):
self.num = 12
self.age = 20
print(foo().__dict__) # 查看对象里的所有成员
print(foo.__dict__) # 查看类里的所有成员
12.__iter__
如果需要对象可循环就要在类里面加
class foo(object):
county = "China"
def __init__(self,num):
self.num = num
def __iter__(self):
return iter(self.num)
obj = foo([11,22,33,55,66])
for item in obj:
print(item)