假設我有的,這將產生O對象輸入列表,以下形式的:啓動子從父類
inps = [['A', 5], ['B', 2]]
和O具有亞類A和B A和B各自與單個啓動整數 - 上述示例中的5或2 - 並且有一個方法update(self, t)
,所以我認爲將它們歸入O超類下是有意義的。我可以用一個循環完成程序:
Os = []
for inp in inps:
if inp[0] == 'A':
Os.append(A(inp[1]))
elif inp[0] == 'B':
Os.append(B(inp[1]))
,然後在運行時,
for O in Os: O.update(t)
我不知道,但是,如果有更多的面向對象的方式來做到這一點。一種方式,我想,可能是做一個假的「O構造」外將O類:
def initO(inp):
if inp[0] == 'A':
return A(inp[1])
elif inp[0] == 'B':
return B(inp[1])
Os = [initO(inp) for inp in inps]
這是更優雅,在我看來,和所有密集的目的給我我想要的結果;但感覺就像是Python中完全濫用類系統。有沒有更好的方法來做到這一點,也許通過O構造函數啓動A和B?
編輯:理想的做法是能夠使用
Os = [O(inp) for inp in inps]
,同時保持O爲A的超類和B
對於低調的選民,你能解釋一下投票背後的推理嗎?這個解決方案不起作用(除了在本地定義類時)還是我說錯了什麼?我沒有回答這個問題嗎?我在這裏沒有充分警告地採用一些不好的做法嗎? – lungj
感謝您的回答。您使用的是globals()@Willem提到的「名稱呼叫」功能嗎? – biffletsbq
有幾種方法可以在Python中按名稱調用事物(例如,https://stackoverflow.com/questions/3061/calling-a-function-of-a-module-from-a-string-with-the-functions -python中的名稱顯示幾個wyas),所以我不確定哪一個被引用。而且,根據您的情況,通過名稱呼叫沒有任何問題。我將用另一種完成任務的方式更新我的答案,與上面的更類似。 – lungj