# o() and o.__call__() are not always equivalent due to the possibility of __getattribute__ or instance attributes:deff():print"func"classC(object):def__getattribute__(self,attr):print"__getattribute__",attrifattr=="__call__":returnfreturnobject.__getattribute__(self,attr)def__call__(self):print"__call__"c=C()c()c.__call__()printtypeprinttype(1)# As evidenced by the following real + important example:# type() is a special function that gets the type of an object:printtype(C)# prints "<type 'type'>"# but type.__call__() is the clsattr for any (non-metaclassed) class,# which is how object creation gets handled:printrepr(type.__call__(C))[:20]# prints "<__main__.C object at 0xXXXXXXX>"