ホームページ >バックエンド開発 >Python チュートリアル >Python インスタンスの特別なメソッドをオーバーライドするにはどうすればよいですか?

Python インスタンスの特別なメソッドをオーバーライドするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-04 05:12:10611ブラウズ

How Can I Override Special Methods on a Python Instance?

インスタンスの特別なメソッドをオーバーライドする

Python では、開発者の共通の目標は、インスタンスの特別なメソッドをオーバーライドすることです。ただし、特別なメソッドは通常、クラス自体でのみ呼び出されるため、これは通常は可能ではありません。

問題:

この概念を説明するために、次のコード スニペットを考えてみましょう。

class A(object):
    pass

def __repr__(self):
    return "A"

from types import MethodType
a = A()
a
repr(a)
setattr(a, "__repr__", MethodType(__repr__, a, a.__class__))
a
repr(a)

上で見たように、インスタンス上で __repr__ を直接オーバーライドしても、期待される結果は得られません。 repr(a) は、オーバーライドされたメソッドの戻り値ではなく、デフォルトのクラス表現を返します。

解決策:

インスタンスで特別なメソッドをオーバーライドするには、間接的なアプローチ。特別なメソッドを、内部のオーバーライドされたメソッドを呼び出すラッパーとして定義します。

class A(object):
    def __repr__(self):
        return self._repr()
    def _repr(self):
        return object.__repr__(self)

これで、_repr() を上書きすることで、インスタンスの __repr__ をオーバーライドできるようになります。例:

a = A()
setattr(a, "_repr", lambda self: "Overridden")
repr(a)

この更新されたコードは、オーバーライドされた文字列表現を出力します。

以上がPython インスタンスの特別なメソッドをオーバーライドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。