gpt4 book ai didi

python - 在运行时重新定义 Python 类

转载 作者:行者123 更新时间:2023-11-30 21:54:15 25 4
gpt4 key购买 nike

我正在编写一个程序,该程序将在某个时候按程序生成自身的新版本,将其保存到文件中,然后从该文件导入它,并用导入的类覆盖相关类。我的意思是整个类将被重新定义,而不仅仅是特定方法的改变。

所以我的问题是,重新定义该类时已创建的实例会发生什么?假设您有:

class FooType():
def __init__(self):
pass

def doSomething(self):
print("Hello from old FooType")

foo = FooType()

# some code is executed here

class FooType():
def __init__(self, bar=None):
self.bar = bar if bar is not None else 'lorem ipsum'

def doSomething(self):
print("Hello world")

def somethingNew(self):
print("Hey, I can do this now!")

foo.doSomething()

给出:

Hello from old FooType

意味着 foo 对象尚未更新,但为什么呢?

最佳答案

因为您只是将名称 FooType 重新绑定(bind)到另一个对象(这也是一个类)。旧的类对象保留在内存中,因为它仍然可以通过实例 foo 引用:id(foo.__class__)。 Python 的“变量”只是内存中某处对象的名称。当一个对象无法通过任何名称引用时,它就会被垃圾收集。

可以通过修改 __class__ 属性在运行时重新分配实例的类型,但这绝对不是标准做法:

一个选项是使用适配器模式,尽管我不确定它是否适用于您的用例:Change type of an object after its creation (typecasting in Python)

关于python - 在运行时重新定义 Python 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59374602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com