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

@property不能保护列表属性不被覆盖

如何解决@property不能保护列表属性不被覆盖

为防止覆盖类变量,通常的做法是“隐藏”底层存储self._data后面的数据,并公开@property方法以返回数据。但是,这不适用于列表:您无法覆盖整个对象(好的),但是[:]访问条目,而@property保护无效。

class Test:
    def __init__(self):
        self._data = [0,1,2]

    @property
    def data(self):
        return self._data


obj = test()
print(obj.data)

# obj.data = [99]   # `AttributeError: can't set attribute` -- Good.
obj.data[:] = [99]  # Yikes!
print(obj.data)
[0,2]
[99]

有什么主意如何防止覆盖?

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