python类特殊方法__setitem__的作用

在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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/866.html