2016-03-06 51 views
-1

如何更新已聲明的類?我的特殊情況是允許用戶在運行時輸入代碼(通過模塊名稱)以在程序確定現有類不足時更新類。所以我們可以說我有一個包含通過運行如何在運行時更新已聲明的類

class ClassA: 
    def __init__(self, field1): 
     self.field1 = field1 

中途我注意到有些情況下,我想使用ClassA只要我能添加一個字段模塊ClassA。我提醒用戶這一點,並給他們選擇。我可以提示他們輸入什麼?他們有可能給我一個重新宣佈課程的文件名嗎?如果不是,我還能如何做到這一點?如果用戶這樣做,該類的現有實例會發生什麼?我假設他們無縫更新,如果這是正確的?

+1

你能對你想要達到的目標更具體嗎?您當然可以在運行時向該實例添加任意屬性,但不會影響該類的其他實例(已經創建或以其他方式)。 – jonrsharpe

+0

像http://stackoverflow.com/questions/962962/python-changing-methods-and-attributes-at-runtime#964049可能工作。如果你的代碼處理剩下的部分,用戶只需要提供成爲方法的函數,而不是整個類重寫舊的函數。 –

回答

1

可以通過將函數分配爲未綁定方法來動態添加或替換類的方法。例如:

class Foo(object): 
    pass 

f = Foo() 

def m(self, x): 
    self.x = x 

Foo.method = m 

f.method(123) 

print(f.x) 

這打印123。儘管method直到f創建之後才被添加,但仍可從f調用。