面向对象高阶-04实现中括号方法的魔法方法及原理
实现点方法的魔法方法:
- getitem
- setitem
- delitem
__getitem__
* 当你用中括号去获取属性时 执行
f1['age']
getitem执行 18
f1['name'] = 'nash'
setitem执行
_\setitem__
- 当你用中括号去设置属性时 执行
f1['age'] = 18
f1['age1'] = 19
输出结果 ---> 对应 __setitem__ 方法代码块里面运行的结果
需要注意点:
f1['name'] = 'nash' 这样的结构的赋值并不会触发,只有在获取属性意义上才会触发getitem,而不是单纯的格式!!!
_\delitem__
- 当你用中括号去删除属性时 执行
del f1['nash']
# del obj[key]时,delitem执行
多个魔法方法结合例子:
列子:
class A:
def __getitem__(self, item):
print("__getitem__")
return self.__dict__[item]
def __setitem__(self, key, value):
print("__setitem__")
self.__dict__[key] = value
def __delitem__(self, key):
del self.__dict__[key]
print("__delitem__")
a = A()
# a.name = "jack"
a["name"] = "jack"
print(a["name"])
del a["name"]
print(a["name"])