2

重複の可能性:
メタクラスのインターセプト オペレーター ルックアップ
新しいスタイル クラスで Python の「マジック」メソッドの呼び出しをインターセプトするにはどうすればよいですか?

次のコードを検討してください。

class ClassA(object):
    def __getattribute__(self, item):
        print 'custom__getattribute__ - ' + item
        return ''
    def __str__(self):
        print 'custom__str__'
        return ''

a=ClassA()
print 'a.__str__: ',
a.__str__

print 'str(a): ',
str(a)

出力は私にとって驚くべきものでした:

a.__str__:  custom__getattribute__ - __str__
str(a):  custom__str__
  • str(a)マジックメソッドにマップされるべきで はありませんa.__str__()か?
  • custom を削除してもClassA.__str__()ClassA.__getattribute__()まだ呼び出しがキャッチされません。どうして?
4

2 に答える 2

0

あなたが電話したとき

a.__str__ 

それは考慮されました

__str__

コンストラクターの 項目として。

def __getattribute__(self, item):
        print 'custom__getattribute__ - ' + item
        return ''

この行で:

print 'custom__getattribute__ - ' + item  
于 2012-11-22T12:07:00.593 に答える