我想了解__setattr__如何處理類屬性。當我試圖覆蓋__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")
我希望得到相同的結果,但我surpirse我能夠設置類屬性,同時防止從最初的聲明之後被所做的更改。
我不明白爲什麼這個工程雖然。我知道它與類和實例變量有關。我的理論是,對一個類變量使用__setattr__會創建一個名稱相同的實例變量,因爲我相信我認爲我曾經看到過這種行爲,但我不確定。
任何人都可以解釋到底發生了什麼嗎?
感謝您的回答。這個解釋正是我所期待的。 –