funções embutidas em python vs funções mágicas e substituindo [duplicado]

Duplicata Possível:
Interceptar a consulta do operador na metaclasse
Como posso interceptar chamadas para os métodos "mágicos" do Python em novas classes de estilo?

Considere o seguinte código:

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 saída foi surpreendente para mim:

a.__str__:  custom__getattribute__ - __str__
str(a):  custom__str__
Não éstr(a) deveria ser mapeado para o método mágicoa.__str__()?Se eu remover o costumeClassA.__str__(), entãoClassA.__getattribute__() ainda não pega a ligação. Por quê?

questionAnswers(2)

yourAnswerToTheQuestion