在python的类中定义了特殊方法__setitem__,这个方法与之对应是之前咱们学习的__getitem__方法,具体的可以查看这里的笔记https://sulao.cn/post/862.html,一个是用key的方式获取,一个是用key的方式来设置对象的值为新值,注意,设置的对象应该是存在,当然这个对象可变时才需要实现这个方法
我们还是直接使用上次的例子修改下
class TestFunc: ip = "127.0.0.1" port = 80 addr = { "ip": ip, "port": port } def __getitem__(self, key): # return self.__dict__.get(key, "ip") return self.addr.get(key) def __setitem__(self, key, value): self.addr[key] = value addr = TestFunc() print(addr.__getitem__("port")) addr.__setitem__("port", 8080) print(addr.__getitem__("port")) addr["port"] = 8081 print(addr.__getitem__("port"))
打印
80 8080 8081
通过上述例子我们可以看到当调用字典的方式设置对象中的属性时,那么会自动触发__setitem__特殊方法
这里需要我们注意的是,当使用__setitem__特殊方法修改了对象以后,需要获取动态的修改结果时也需要使用__getitem__方法获取,所以如果我们使用addr.port将会获得未修改的对象未修改属性port的值,即80