item 会将数据操作类似于字典的操作 具体用到的方法 __getitem__(self, item): __setitem__(self, key, value): __delitem__(self, key): __delattr__(self, item): ps: 这些方法外部都是无法调用的 内部原理:
1 class Foo: 2 def __init__(self,name,age,sex): # 初始化方法,构造方法 3 self.name = name 4 self.age = age 5 self.sex = sex 6 7 def __getitem__(self, item): 8 if hasattr(self,item): 9 return self.__dict__[item]10 11 def __setitem__(self, key, value):12 self.__dict__[key] = value13 14 def __delitem__(self, key):15 del self.__dict__[key]16 17 def __delattr__(self, item): # 本身就已经实现了,object类原生支持,其他则需要自己实现18 del self.__dict__[item] # 原生就是 f.的方式删除19 20 21 f = Foo("suyang",2,"SB")22 print(f["name"])23 24 f["hobby"] = "egg"25 print(f["hobby"])26 27 del f["hobby"]28 print(f.__dict__)
正常操作的表象:
1 class Foo(): 2 def __init__(self,name,age): 3 self.name = name 4 self.age = age 5 6 a = Foo("yangtuo",18) # 本质上内部执行了 __init__ 方法 7 print(a.__dict__) # {'name': 'yangtuo', 'age': 18} 8 a.hobby = "play" # 本质内部执行的是 __setitem__ 9 print(a.hobby) # 本质上是内部执行了 __getitem__10 del a.hobby # 本质上内部执行了 __delattr__ 11 print(a.hobby) # AttributeError: 'Foo' object has no attribute 'hobby'