ここでの問題は、それはあなたが盗むしようとしているバインドされた方法であるということです、しかし、あなたの例では、その機能を必要としませんインスタンス状態(self
)を使用します。
- が
A.foo
の定義を作成し、静的メソッド(@staticmethod
デコレータ)
- 飾るまたは未使用の引数を渡す機能をラップ:したがって、次の2つの即時のオプションがあります。例えば。
functools
を使用してください。
例:
import functools
stolen = functools.partial(A.foo, None)
これは、あなたのメソッドは、インスタンスの状態を使用しないために動作し、サブクラスを作成する必要はありません。
バインドされたインスタンスメソッド(A.foo
など)には、バインドされたインスタンス引数(self
、selfはA
のインスタンス)が必要です。通常の使用では、この最初の引数は自動的に渡されます。今すぐ
a = A()
:
a.foo()
A.foo(a)
...両方等価です。最初のケースでは、構文instance.bound_method()
は、字句的な観点からInstanceClass.bound_method(instance)
(instance
はself
に解決されます)を表しています。このため、A
のインスタンスが必要であるため、A.foo()
を呼び出すとエラーが発生します。
上記の解決策は、None
をインスタンスとして渡す関数に関数をワープすることです。インスタンスは決して使用されないため(状態ベースのロジックはありません)。 staticメソッドを使用する場合は、第1の暗黙の期待バインドインスタンス引数self
を削除します。
'foo'がインスタンスメソッドではなくクラスメソッドであった場合、これは意味をなさないでしょう。 – NullUserException