私は__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__を使うと、同じ名前のインスタンス変数が作成されます。これは前にこの振る舞いを見たと思いますが、わかりません。
ここで何が起こっているのか正確に説明できますか?
答えをありがとう。この説明はまさに私が探していたものでした。 –