魔法方法 -- 字典
代码
class Demo(object):
def __init__(self, start = 0, step = 1):
self.start = start
self.step = step
self.changed = {}
def __getitem__(self, key):
try:
return self.changed[key]
except KeyError:
return self.start + key * self.step
def __setitem__(self, key , value):
self.changed[key] = value
print('长度1: ', len(self.changed))
def __delitem__(self, key):
self.changed.pop(key)
print('长度2: ', len(self.changed))
def main():
demo = Demo(1,2)
# 自动触发执行 __getitem__
print(demo[4])
print(demo.changed)
# 自动触发执行 __setitem__
demo[4] = 2
print(demo[4])
print(demo.changed)
# 自动触发执行 __delitem__
del demo[4]
print(demo.changed)
if __name__ == '__main__':
main()
输出:
9
{}
长度1: 1
2
{4: 2}
长度2: 0
{}
PS: 前后双下划线的方法, 以前叫魔法(magic)变量或魔法方法, 现在叫dunders