2.7.9でチェックイン
__getattribute__
またはにある魔法のメソッドのいずれかを使用して、への呼び出しをバイパスする方法が見つかりませんでしobject
たtype
:
# Preparation step: did this from the console
# magics = set(dir(object) + dir(type))
# got 38 names, for each of the names, wrote a.<that_name> to a file
# Ended up with this:
a.__module__
a.__base__
#...
これをそのファイルの先頭に置き、名前を適切なpythonモジュール(asdf.py)に変更しました
global_counter = 0
class Counter(object):
def __getattribute__(self, name):
# this will count how many times the method was called
global global_counter
global_counter += 1
return super(Counter, self).__getattribute__(name)
a = Counter()
# after this comes the list of 38 attribute accessess
a.__module__
#...
a.__repr__
#...
print global_counter # you're not gonna like it... it printer 38
getattr
それから私はまたそれらの名前のそれぞれをそしてhasattr
->同じ結果を得ようとしました。__getattribute__
毎回呼び出されました。
ですから、他のアイデアがあれば...私は怠惰すぎてCコードの内部を調べることができませんでしたが、答えはどこかにあると確信しています。
だから、私が正しくないことがあるか、ドキュメントが嘘をついているかのどちらかです。