在实例方法中更改类实例

vin*_*ios 7 python class instance hotswap

任何想法是否有办法使以下代码工作

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
Run Code Online (Sandbox Code Playgroud)

类似于以下安全用于更复杂的对象(如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
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 7

self = Test(3)正在重新绑定本地名称self,没有外部可观察的效果.

分配self.__dict__(除非您在使用__slots__具有非平凡元类的类中讨论实例)通常是可以的,因此self.__init__(3)重新初始化实例也是如此.但是我更喜欢有一个特定的方法self.restart(3),它知道它已经在一个已经初始化的实例上调用,并且做了满足特定和不寻常情况所需的一切.