ホームページ >バックエンド開発 >Python チュートリアル >Python でインスタンス メソッドを追加してアクセスするにはどうすればよいですか?
インスタンス メソッドへのアクセス
Python では、オブジェクトには関数とバインドされたメソッドという 2 種類のメソッドがあります。バインドされたメソッドは特定のインスタンスに関連付けられており、呼び出されたときにそのインスタンスを最初の引数として渡します。一方、関数はバインドされておらず、いつでも変更できます。
違いを説明するには:
def foo(): print("foo") class A: def bar(self): print("bar") a = A() print(foo) # <function foo at 0x00A98D70> print(a.bar) # <bound method A.bar of <__main__.A instance at 0x00A9BC88>>
クラス定義へのメソッドの追加
クラス定義を変更して、すべてのインスタンスに新しいメソッドを追加できます。たとえば、次の例では fooFighters メソッドを A クラスに追加します。
def fooFighters(self): print("fooFighters") A.fooFighters = fooFighters a2 = A() a2.fooFighters() # fooFighters # Also affects previously defined instances a.fooFighters() # fooFighters
単一インスタンスへのメソッドの追加
個々のインスタンスへのメソッドの追加はより複雑です。関数がインスタンスにバインドされていないため、次の試行は失敗します:
def barFighters(self): print("barFighters") a.barFighters = barFighters a.barFighters() # TypeError: barFighters() takes exactly 1 argument (0 given)
関数をバインドするには、types モジュールの MethodType 関数を使用します:
import types a.barFighters = types.MethodType(barFighters, a) a.barFighters() # barFighters # Other instances unaffected a2.barFighters() # AttributeError: A instance has no attribute 'barFighters'
記述子のさらなる調査メタクラス プログラミングは、オブジェクト メソッドを操作するためのより高度なテクニックを提供します。
以上がPython でインスタンス メソッドを追加してアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。