【发布时间】:2012-02-28 06:16:03
【问题描述】:
我正在运行一个交互式 python 会话,它构建 big python 数据结构(5+ GB),需要很长时间才能加载,所以我想利用 Python -fly 代码更改 能力最大化(尽管有时,不必为此做太多计划)。
我当前的问题如下:我有一个类的旧实例,后来我修改了代码并重新加载了模块——我希望旧实例能够使用新的函数定义。在不手动将所有信息从旧实例复制到新实例的情况下,如何做到这一点?
这是我尝试过的。假设我有模块M.py:
class A():
def f(self):
print "old class"
这是一个交互式会话:
import M
old_a = M.a()
# [suppose now I change the definition of M.A.f in the source file]
reload(M)
# I attempt to use the new class definition with the old instance:
M.A.f(old_a)
此时我从 Python 收到以下类型错误:
TypeError: unbound method f() must be called with A instance as first argument (got A instance instead)
Python 显然不乐意接收 A 的旧实例,即使它们在功能上基本上是等效的类型(在我的代码中)——有什么方法可以将它“类型转换”为新的实例类型,以便 Python 不会不抱怨?道德上的东西:M.A.f( (M.A) old_a ) ?
【问题讨论】:
-
你遇到的问题是你试图在一个类上调用一个对象方法。对于您想要的解决方案是获取模块功能,因为方法与对象相关联,因此当您重新加载模块时旧对象将保留旧方法
标签: python object casting module reload