python - 在实例方法中更改类实例

标签 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

类似于下面的东西,可以安全地用于更复杂的对象(比如 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/

相关文章:

python - Pygame - 运行时错误 : maximum recursion depth exceeded while calling a Python object

python - 如何处理 JSON 中缺失的数据

Java 设置准备好的语句

c++ - 在什么语言中有 "guard"关键字或概念?

python - __coerce__ 与 __ihook__ 区别?

python - 为什么在实例化类时不调用父构造函数?

javascript - 如何修复 'warning Expected ' this' to be use by class method ' eslint 错误?

python - 如何添加到从另一个类继承的 python 类的初始定义?

iOS - 应用程序初始 ViewController 实例

c++ - 将成员函数分配给实例成员的属性