質問

あらゆるアイデアがある場合には、次のコードを作

class Test(object):

    def __init__(self, var):
        self.var = var

    def changeme(self):
        self = Test(3)

t = Test(1)
assert t.var == 1
t.changeme()
assert t.var == 3

は次のようなものである安全な利用のための複雑なオブジェクト(djangoのようなモデルは、ホットスワップのdbエントリのインスタンスを参照)

class Test(object):

    def __init__(self, var):
        self.var = var

    def changeme(self):
        new_instance = Test(3)
        self.__dict__ = new_instance.__dict__

t = Test(1)
assert t.var == 1
t.changeme()
assert t.var == 3
役に立ちましたか?

解決

self = Test(3) 再結合のローカル名 self, は、外部から観察できます。

self.__dict__ (ませんが話スのインスタンス __slots__ または授業が非自明なmetaclasses)は、通常OKなので、 self.__init__(3) 再初期化インスタンス.しかし特定の方法 self.restart(3)知ってい するということは、既に初期化されたインスタンスなどの必要に対応することは珍しい。

他のヒント

ノー、ノーます。

それを言って、あなたののクラスを変更することができます。のが、どちらかそれをしない。

それだけではchangemeの範囲()内の「自己」という名前のオブジェクトを置き換えて

は、それを除いて、元のコードの作品は、見て、あまりないでしょう。 Pythonの名が値にロックされていない、彼らは常に、その範囲または名前空間を基準にしています。

は、あなたがその中からに割り当てることができ、クラス、外部の名前にアクセスする必要があると思いやりたいです

class Test:
  def changeme(self):
    global myclass
    myclass = Test(3)

myclass = Test(2)
myclass.changeme()
print myclass # 3

これは基本的にはちょうど新しいインスタンスを指すように名「MyClassの」を上書きします。それはあなたのような最初のインスタンスが考える「上書き」しません。古いインスタンスはまだ生きて、そして他の場所で参照されない限りゴミ収集されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top