Python 的类特殊方法比较多,总体感觉就和c++的方法重写差不多,我这里简单举几个例子
# -----------------------
# __Author : tyran
# __Date : 17-11-9
# -----------------------
class Base:
def __init__(self):
print('init')
self.num = 1
self.name = 'aaa'
self.li = [11, 22, 33, 44, 55]
def __call__(self, *args, **kwargs):
print('call')
def __int__(self):
return 999
def __str__(self):
return 'aaa'
def __add__(self, other):
return self.num + other.num
def __del__(self): # 析构方法
print('__del__')
def __getitem__(self, item): # [8] 和 [1:5:2]都是调用这个函数但是切片的时候item的类型是slice
print(type(item))
if type(item) == slice:
print(item.start) # 起始位置
print(item.stop) # 结束位置
print(item.step) # 步长
return item
def __setitem__(self, key, value):
print(key, value)
def __delitem__(self, key):
print(key)
def __iter__(self):
return iter(self.li)
base = Base()
base() # 执行__call__方法
print(int(base)) # 执行对象的__int__方法
print(str(base)) # 执行__str__方法
base1 = Base()
base2 = Base()
print(base1 + base2) # 执行__add__
print(base.__dict__) # 返回所有成员变量
# {'num': 1, 'name': 'aaa'}
print(base[8]) # 执行__getitem__方法
# 8
print(base[1:5:2]) # 执行__getitem__方法
# slice(1, 5, 2)
base[8] = [100, 2] # 执行__setitem__方法
# key:8 value:[100, 2]
del base[2] # 执行__delitem__方法
for i in base: # 执行__iter__方法
print(i)
# 11
# 22
# 33
# 44
# 55