微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字典成员键更改的 Python 调用函数

如何解决字典成员键更改的 Python 调用函数

我有一个看起来像这样的类:

class MyClass:
    _properties: Dict[str,Any]

    @property
    def properties(self) -> Dict[str,Any]:
        ...

我想要发生的是我想在字典更改时收到通知。所以当用户这样做时:

obj = MyClass()

obj.properties['optimization'] = '-O3'

我想要调用一些回调函数,理想情况下是一个可以访问创建/修改的键和值的回调函数

我唯一能想到的就是继承 dict 并覆盖 __setitem__,但我想知道是否有更好的方法来做到这一点。

解决方法

你可以有一个子类来做你想做的事:

class MyClass:
    class Properties(dict):
        def __setitem__(self,key,value):
            print("Key {} was set to {}".format(key,value))
            super().__setitem__(key,value)

    _properties = Properties()

    @property
    def properties(self) -> Dict[str,Any]:
        return self._properties


m = MyClass()
m.properties['a'] = 12
print(m.properties)

输出为:

Key a was set to 12
{'a': 12}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。