正如我所理解的,您可以在文件和項目之間發送物體,只要這些物體都存在於兩個名稱空間中即可。我有兩個應用程序,這將傳遞一個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