1
可能的重複: Is there a way to create subclasses on-the-fly? Dynamically creating classes - PythonPython的動態子類
我想創建一個子類,其中唯一的區別是一些類變量,但我想一切保持不變。我需要動態執行此操作,因爲我只知道運行時的類變量值。
以下是一些示例代碼。我希望FooBase.foo_var是「默認」,但是FooBar.foo_var是「bar」。到目前爲止,沒有嘗試成功。
class FooBase(object):
foo_var = "default"
def __init__(self, name="anon"):
self.name = name
def speak(self):
print self.name, "reporting for duty"
print "my foovar is '" + FooBase.foo_var + "'"
if __name__ == "__main__":
#FooBase.foo_var = "foo"
f = FooBase()
f.speak()
foobarname = "bar"
#FooBar = type("FooBar", (FooBase,), {'foo_var': "bar"})
class FooBar(FooBase): pass
FooBar.foo_var = "bar"
fb = FooBar()
fb.speak()
非常感謝
編輯所以我顯然有這一行的一個問題:在代碼
print "my foovar is '" + FooBase.foo_var + "'"
接受的答案有self.foo_var
。這就是我應該做的。我現在覺得很荒謬。
謝謝,我失蹤了'self.foo_var'。我寧願有一個類變量而不是一個實例變量的原因是,我會擁有大量的實例,但可能只有1-3個子類。 – liang
基於這種動機,我認爲你應該讓foo_var成爲一個實例變量。在沒有實例變量的情況下,創建你的這些實例將會同樣快速。這聽起來像你正試圖優化一些東西,而不需要太多。 –
是的,你是對的。我有壓力盡可能地優化這一點。我會嘗試帶/不帶類變量,看看是否有任何區別(可能不是) – liang