Я использую Python 2.7.2.Я хочу понять связь между вызовом функции и вызовом атрибута __call__
функции.Например, рассмотрим следующий код
def foo():
return 5
print foo() # ==> 5
print foo.__call__() # ==> 5
foo.__call__ = lambda : 6
print foo() # ==> 5
print foo.__call__() # ==> 6
Первые четыре строки указывают на то, что вызов функции foo
аналогичен вызову атрибута __call__
foo
.Тем не менее, последние три строки, похоже, указывают на то, что это разные звери, так как я изменил атрибут __call__
, но он не изменил значение, возвращаемое при вызове, на foo()
.
Может кто-нибудь объяснить связьмежду звонком foo()
и звонком foo.__call__()
?Есть ли способ изменить поведение функции так, чтобы foo()
, а также foo.__call__()
теперь возвращали 6 вместо 5?