正如我所理解的,您可以在文件和项目之间发送物体,只要这些物体都存在于两个名称空间中即可。我有两个应用程序,这将传递一个Prime对象。更改腌渍物体的功能
class Prime():
def __init__(self):
self.a = 1
def func(self):
print(self.a)
这两个应用程序都以上面的素数版本开始。但第一个应用程序将不得不改变Prime的功能,例如func将会打印(“hello world”)。然后,第二个应用程序将收到总理的第一次的版本通过泡菜和使用这样的:
Second.py:
i = Prime
i.func()
with open("temp.txt", "r") as text:
o = pickle.load(text)
o.func()
输出:
1
hello world
我的2部分的问题这是。如果第二个应用程序在其名称空间中只有原始版本的Prime,那么只要函数名称没有更改,它就可以使用第一个应用程序。如果是的话,我该如何去改变Prime.func的功能?
首先,你的意思是'我= Prime()'? – abarnert
其次,你真的不能使用'pickle'在不同的应用程序之间发送具有不同模块和类名的相同名称的对象,而没有很多诡异的解决方法。你是否特别要问如何为你的特定案例做这些黑客行为?即使你知道这通常是一个坏主意,因为你确定在这种情况下它不是? – abarnert
最后,通常'pickle'永远不会真正地腌制函数对象,只是[完全限定引用它们的名字](http://docs.python。组织/ 2 /库/ pickle.html#什么,可待腌-和拆封)。解决这个问题的唯一方法是实现你自己的'__reduce__'和朋友,他们会做一些事情,像pickle'co_code'和其他需要从另一边重新构建代码和函数的信息(并检查它是否适合Python版本,作为.pyc文件)。如果这对你来说听起来像是希腊语,你甚至不应该考虑这一点。 – abarnert