我正在嘗試在一個類中創建可執行函數的字典。但無法使自我參數正常工作。帶有一個類內函數字典的自參數
考慮下面的代碼:
class myclass(object):
def x(self):
return 'x'
def y(self):
return 'y'
EF= {
'a':x,
'b':y,
}
def test(self):
print self.EF['a']()
當我試圖執行類的「測試」功能,我避開參數的數量錯誤,因爲它評估和執行中的功能之一字典。
>>> class myclass(object):
... def x(self):
... return 'x'
... def y(self):
... return 'y'
... EF= {
... 'a':x,
... 'b':y,
... }
... def test(self):
... print self.EF['a']()
...
>>>
>>>
>>> m=myclass()
>>> m.test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 11, in test
TypeError: x() takes exactly 1 argument (0 given)
我已經嘗試了一些變化,包括這不起作用。
EF= {
'a':self.x,
'b':self.y,
}
唯一沒有工作的是當我明確地將自我作爲參數傳遞時,像這樣。
... def test(self):
... print self.EF['a'](self)
...
>>> m=myclass()
>>> m.test()
x
我已經看到關於使用字典索引函數的其他問題,但沒有一個在類內。
這裏是我的問題:
- 什麼是做處理自我參數的正確方法是什麼?
- 我寧願將我的字典常量外的類移動到我的常量部分。我能做到嗎,如果是的話,怎麼做?我應該這樣做嗎?
- 如果我應該/必須在我的課堂上有我的字典,爲什麼我不能將它移動到課程頂部?
這就是我得到的。謝謝您的幫助。
看起來不錯,但我再次失去了選票......。 –
太棒了。好的解釋也是如此。謝謝。聲明只在類中的類中使用的常量,還是應該放在__init__函數中,這是不錯的做法嗎? –
@WesModes在python中並沒有真正的常量概念,但你總是可以使用['@ property'](https://docs.python.org/2/library/functions.html#property)裝飾器來完成你的需求。請參閱此鏈接以及:http://stackoverflow.com/questions/2682745/creating-constant-in-python –