不知道是否有办法让下面的代码工作
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 模型,热交换实例所指的数据库条目)
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)
正在重新绑定(bind)本地名称 self
,没有外部可观察到的影响。
分配 self.__dict__
(除非您谈论的是带有 __slots__
的实例或来自具有非平凡元类的类)通常是可以的, 也是如此self.__init__(3)
重新初始化实例。但是,我更希望有一个特定的方法 self.restart(3)
,它知道它正在一个已经初始化的实例上被调用,并做任何需要的事情来满足这个特定的需求和不寻常的情况。
关于python - 在实例方法中更改类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2137772/