ホームページ >バックエンド開発 >Python チュートリアル >Python インスタンスの特別なメソッドをオーバーライドするにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。