インスタンスの属性をクラスの外部から変更できない(値を取得できる)クラスを作成するための最も便利な方法は何でしょうか。したがってself.var = v
、クラスのメソッドの内部を呼び出すことはできますが、外部を呼び出すことはできませんClassObject().var = v
。クラスの?
いじってみまし__setattr__()
たが、オーバーライドすると、メソッドname
で属性を開始できません。__init__()
唯一の方法は、オーバーライド__setattr__()
して使用するobject.__setattr__()
ことです。これは、現在私が行っていることです。
class MyClass(object):
def __init__(self, name):
object.__setattr__(self, "name", name)
def my_method(self):
object.__setattr__(self, "name", self.name + "+")
def __setattr__(self, attr, value):
raise Exception("Usage restricted")
これでこのソリューションは機能し、それで十分ですが、もっと良いソリューションがあるかどうか疑問に思いました。これの問題は次のとおりですobject.__setattr__(MyClass("foo"), "name", "foo_name")
。クラス外のどこからでも電話をかけることができます。
クラスの外部から変数を何かに設定することを完全に防ぐ方法はありますか?
編集:私がここで探していないことに言及していない愚かな私property
、あなたの何人かはすでにそれに答えました、しかしそれは変更可能のままになるので私にとっては十分ではありませんself._name
。