ホームページ > バックエンド開発 > Python チュートリアル > Python の特別なメソッドをインスタンス上で直接オーバーライドできますか?

Python の特別なメソッドをインスタンス上で直接オーバーライドできますか?

Susan Sarandon
リリース: 2024-11-30 04:04:10
オリジナル
177 人が閲覧しました

Can You Override Python's Special Methods Directly on Instances?

インスタンス オブジェクトの特別なメソッドをオーバーライドする

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 サイトの他の関連記事を参照してください。

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