ホームページ >バックエンド開発 >Python チュートリアル >Python の特別なメソッドをインスタンス上で直接オーバーライドできますか?
インスタンス オブジェクトの特別なメソッドをオーバーライドする
Python では、名前が二重アンダースコアで囲まれた特別なメソッドは通常、インスタンス上では呼び出されず、インスタンス上で呼び出されます。彼らのクラス。これは、標準インタープリタである CPython の実装の詳細です。したがって、インスタンスで __repr__() を直接オーバーライドして、カスタム実装の使用を期待することはできません。
たとえば、次のコードを考えてみましょう。
class A(object): pass def __repr__(self): return "A" from types import MethodType a = A() print(a) # Output: <__main__.A object at 0x0101C5D0> print(repr(a)) # Output: '<__main__.A object at 0x0101C5D0>'
できる限りrepr(a) は期待される "A" の結果を生成しません。
この制限を回避するには、元のメソッドを呼び出す新しいメソッドを定義する必要があります。
class A(object): def __repr__(self): return self._repr() def _repr(self): return object.__repr__(self)
これで、_repr():
setattr(a, "_repr", MethodType(my_repr, a, a.__class__))
を置き換えることで、インスタンスの __repr__() をオーバーライドできます。
ここで、my_repr は目的のカスタム実装です。以上がPython の特別なメソッドをインスタンス上で直接オーバーライドできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。