代碼片段。
class foo:
def __init__(self, items):
self.myObj = {
"item one": self.functionOne(),
"item two": self.functionTwo()
}
self.__handler()
def __handler(self):
for item in items:
if item in self.myObj.keys():
self.myObj[item]
def functionOne(self):
# do stuff
def functionTwo(self):
# do stuff
問題。我試圖在不使用 if 陳述句的情況下呼叫正確的函式。運行此代碼的結果是:functionX 接受 0 個位置引數,但給出了 1 個。
所需的最終狀態。在類內部使用物件呼叫正確的函式。或指導是否有更好的方法來做到這一點。
更大的畫面。我希望通過的專案計數會定期更改。我想確保我的處理程式可以在不修改現有代碼的情況下管理增加或減少(在 myObj 的范圍內)。
備用計劃。萬一我試圖完成的事情是不可能的,我正在考慮將類 foo 匯入到呼叫 foo 的更高級別的類中。然后傳遞一個已映射函式的物件。如果有人可以闡明這種替代方案,以防我想要的最終狀態是不可能的。
編輯。
- 忘記在建構式中添加處理程式呼叫。
- 更正了縮進和函式定義。
- 添加了注釋解決方案(感謝 kpie)。
kpie的解決方案。
class foo:
def __init__(self, items):
self.myObj = {
"item one": self.functionOne, # removed () from original
"item two": self.functionTwo # removed () from original
}
self.__handler(items)
def __handler(self,items):
for item in items:
if item in self.myObj.keys():
self.myObj[item]() # added () from original
def functionOne(self):
print("bar")
def functionTwo(self):
print("baz")
foo(["item one"]) # example test (1) item, output: bar
foo(["item two","item one"]) # example test (2) items, output: baz, bar
uj5u.com熱心網友回復:
沒有什么可以阻止您將函式存盤在字典中以進行查找。這是一個顯示正確語法的示例。
class foo:
def __init__(self, items):
self.myObj = {
"item one": self.functionOne,
"item two": self.functionTwo
}
self.__handler(items)
def __handler(self,items):
for item in items:
if item in self.myObj.keys():
self.myObj[item]()
def functionOne(self):
print("bar")
def functionTwo(self):
print("baz")
foo(["item one"])
foo(["item two","item one"])
印刷:
bar
baz
bar
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411845.html
標籤:
