Какая связь между __getattr__ и getattr?

Я знаю, что этот код прав:

class A:   
    def __init__(self):
        self.a = 'a'  
    def method(self):   
        print "method print"  

a = A()   
print getattr(a, 'a', 'default')   
print getattr(a, 'b', 'default')  
print getattr(a, 'method', 'default') 
getattr(a, 'method', 'default')()   



И это неправильно

# will __getattr__ affect the getattr?

class a(object):
    def __getattr__(self,name):
        return 'xxx'

print getattr(a)

Это тоже неправильно:

a={'aa':'aaaa'}
print getattr(a,'aa')



Где мы должны использовать эти функции (__getattr__ а такжеgetattr)

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

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