2011-04-21 70 views
0

我有一種情況,用戶可以從另一個類中選擇另一個方法,並使用它在自己的類中使用.im_func。我舉例如下python,保存對導入模塊所做的更改

import foo1 
import foo2 
foo1.ClassX.methodX = foo2.ClassX.methodX.im_func 

其中methodX可以在兩個模塊中以不同的方式實現。 當我實例化對象說foo1.Class(), methodX from module foo2`被使用。

我的問題是如何將更改作爲foo3.py保存到新的源代碼文件。

+0

爲什麼你會這樣做與子類化和多繼承? – Keith 2011-04-21 15:12:08

+0

這些類是相同的,但版本不同。 – shaz 2011-04-21 15:15:33

+0

所以你是動態混合版本?無論如何,你會得到的編譯對象,你不能輕易重新轉換成源代碼。 – Keith 2011-04-21 15:17:02

回答

0

將其保存爲新PY可能是一個問題,但你可以很容易地使用序列化它(泡菜模塊)

見:http://docs.python.org/library/pickle.html

+0

模塊不能被醃漬... – pberkes 2011-04-21 14:16:06

+0

但功能是在對象內部,這可以被序列化。或者我錯過了這一點? – 2011-04-21 15:29:59

0

的源代碼可以用inspect模塊進行檢索。然而,問題在於,它是原始的源代碼,而不是動態修改對象的源代碼。

0

您是否考慮過使用parser結合上述inspect來做到這一點?在這種情況下,簡單地使用文本處理可能會更好,而不是嘗試使用導入的模塊。

編輯:使用分析器來打印文件的一個例子:

with open('foo1.py','r') as fh: 
    st = parser.suite(fh.read()) 
    src1 = parser.st2list(st) 

with open('foo2.py','r') as fh: 
    st = parser.suite(fh.read()) 
    src2 = parser.st2list(st) 

你不得不那麼做一些棘手的編程合併從源代碼的方法,並將其寫入文件。但後來我有奇怪的感覺,我不是很理解這個問題...

+0

可以舉個例子嗎? – shaz 2011-04-21 15:11:43