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] = value
13
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'