4

str()オーバーロードされたメソッドを持つオブジェクトを呼び出すと、__getattribute__それを使用していないようで、代わりに__str__直接呼び出します。変更する必要がある他の機能や、それを使用する方法はあります__getattribute__か? 直接オーバーロード__str__すると、期待どおりに動作しますが、それは私のニーズには理想的ではありません。

class A(object):
    def __getattribute__(self, attr):
        if attr == "__str__":
            return lambda: "Hello"
        return object.__getattribute__(self, attr)

x = A()

print(x)
print(str(x))
print(x.__str__())

出力:
< main .A object at 0x000001FDF7AEA760>
< main .A object at 0x000001FDF7AEA760>
こんにちは

期待される出力:
ハロー
ハロー
ハロー

4

1 に答える 1