この記事の例では、Python のバインドされたクラス メソッドとアンバインドされたクラス メソッドについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
関数と同様、Python のクラス メソッドもオブジェクトです。メソッドにはインスタンスとクラスの両方を介してアクセスできるため、Python には 2 つのスタイルがあります:
Unbound クラス メソッド: self なし
クラスを介してメソッドを参照すると、Unbound メソッド オブジェクトが返されます。これを呼び出すには、最初の引数としてインスタンスを明示的に指定する必要があります。
バインドされたインスタンスメソッド: インスタンスアクセスメソッドを通じてバインドされたメソッドオブジェクトを返す self
があります。 Python はインスタンスをメソッドに自動的にバインドするため、呼び出し時にインスタンス パラメーターを渡す必要はありません。
どちらのメソッドもオブジェクトであり、渡したり、リストに保存したり、待機したりできます。どちらのランタイムも最初の引数 (self 値) としてインスタンスを必要としますが、インスタンスを通じてバインドされたメソッドを呼び出すときに、Python が自動的にインスタンスを提供します。たとえば、次のコードを実行します。
class Test: def func(self,message): print message object1=Test() x=object1.func x('绑定方法对象,实例是隐含的') t=Test.func t(object1,'未绑定的方法对象,需要传递一个实例') #t('未绑定的方法对象,需要传递一个实例') #错误的调用
object1=Test() はインスタンスを生成し、object1.func はバインディング メソッドを返し、インスタンス object1 をメソッド func にバインドします。
そして、Test.func はクラスを使用してメソッドを参照し、バインドされていないメソッド オブジェクトを取得します。これを呼び出すには、t(object1,'Unbound メソッド オブジェクト、インスタンスを渡す必要があります') などのインスタンス パラメーターを渡す必要があります。
ほとんどの場合、メソッドを直接呼び出すため、通常はメソッド オブジェクトに気づきません。ただし、ジェネリック オブジェクトを呼び出すコードの作成を開始する場合は、インスタンス パラメーターを渡す必要がある非バインド メソッドに特別な注意を払う必要があります。
Python のバインドおよびアンバインド クラス メソッドの使用分析に関する詳細な説明については、PHP 中国語 Web サイトに注目してください。