встроенные функции Python против магических функций и переопределения [дубликат]

Возможный дубликат:
Поиск оператора перехвата на метаклассе
Как я могу перехватывать вызовы «магических» методов 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__()?Если я уберу кастомClassA.__str__(), тогдаClassA.__getattribute__() до сих пор не отвечает на звонок. Как придешь?

Ответы на вопрос(2)

Ваш ответ на вопрос