【发布时间】:2016-09-26 17:15:19
【问题描述】:
我试图了解 __setattr__ 如何与类属性一起工作。当我试图重写 __setattr__ 以防止在简单类中写入属性时,这个问题就出现了。
我第一次尝试使用实例级属性如下:
class SampleClass(object):
def __init__(self):
self.PublicAttribute1 = "attribute"
def __setattr__(self, key, value):
raise Exception("Attribute is Read-Only")
我原本以为只有外部尝试设置属性才会抛出错误,但即使是 __init__ 里面的语句也会导致抛出异常。
后来我最终找到了另一种方法来解决这个问题,同时尝试解决不同的问题。我最终得到的是:
class SampleClass(object):
PublicAttribute1 = "attribute"
def __setattr__(self, key, value):
raise Exception("Attribute is Read-Only")
我希望得到相同的结果,但令我惊讶的是,我能够设置类属性,同时防止在初始声明后进行更改。
但我不明白为什么会这样。我知道这与类与实例变量有关。我的理论是在类变量上使用 __setattr__ 会创建一个同名的实例变量,因为我相信我认为我以前见过这种行为,但我不确定。
谁能解释一下这里发生了什么?
【问题讨论】:
标签: python