以下に示すように、クラスのデフォルトの動作を提供したいと思います。バインドされていないメソッド<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)
で失敗します。奇妙なことに、np.min
ではなく、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、ヒンジのおかげで。しかし、新しいスタイルのクラスではこの問題は解決されません。 –