我想爲類提供默認行爲,如下所示。未綁定方法<method>必須使用<class>實例作爲第一個參數調用
import numpy as np
class Test:
def __init__(self, my_method=None):
self.my_method = my_method or np.min
Test().my_method([1, 2, 3]) # >>> 1
代碼按預期工作。爲了讓所有的默認值加在一起,便於代碼維護,我想更改代碼以
import numpy as np
class Test:
default_method = np.min
def __init__(self, my_method=None):
self.my_method = my_method or Test.default_method
Test().my_method([1, 2, 3]) # >>> TypeError
但調用my_method
失敗,出現錯誤消息unbound method amin() must be called with Test instance as first argument (got list instance instead)
。奇怪的是,如果我使用內置的min
而不是np.min
,則代碼將按預期工作,即以下方式按預期工作。
import numpy as np
class Test:
default_method = min # no np.
def __init__(self, my_method=None):
self.my_method = my_method or Test.default_method
Test().my_method([1, 2, 3]) # >>> 1
我錯過了什麼?
在Python2中,您應該使用新的樣式類聲明。這些派生自'class Test(object):'中的'object'。我完全忘記了老式課程的語義,但認爲這可能會影響你的問題。 – msw
@msw,謝謝你的興奮。但是,這個問題仍然存在於新式課堂中。 –