ホームページ > バックエンド開発 > Python チュートリアル > Python でインスタンス メソッドを追加してアクセスするにはどうすればよいですか?

Python でインスタンス メソッドを追加してアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-20 17:38:10
オリジナル
682 人が閲覧しました

How Do I Add and Access Instance Methods in 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート