__setattr__
インスタンス変数のオーバーライドを介してできるように、Python でクラス変数へのアクセスを防止または変更する方法はありますか?
この質問はタイトルが間違っており、実際にはクラス変数ではなくインスタンス変数を参照していることに注意してください。
である(見かけの)デストラップに関する複数の投稿を読んだことに基づいて__slots__
、私はそのルートに行かないことを好みます(そして、それが私が求めていることを行うかどうかを知るのに十分に調べていません)。
例:
class A(object):
foo = "don't change me"
def __setattr__(self, name, value):
raise ValueError
if __name__ == '__main__':
a1 = A()
print a1.foo # don't change me
print A.foo # don't change me
A.foo = 'bar' # ideally throw an exception or something here
print A.foo # bar
a2 = A()
print a1.foo # bar
print a2.foo # bar