Python 2.7.2 kullanıyorum. Bir işlevi çağırmak ve işlevin __call__
özniteliğini aramak arasındaki ilişkiyi anlamak istiyorum. Örneğin, dört satır fonksiyon foo
çağırarak gösterir gibi görünmektedir aşağıdaki koduPython fonksiyonları ve bunların __call__ nitelik
def foo():
return 5
print foo() # ==> 5
print foo.__call__() # ==> 5
foo.__call__ = lambda : 6
print foo() # ==> 5
print foo.__call__() # ==> 6
ilkleri dikkate foo
ait __call__
niteliğini çağırarak aynıdır. Ancak, son üç satır I __call__
niteliği değişti ama foo()
bir çağrı tarafından döndürülen değeri değişmedi çünkü onlar farklı hayvanlar olduklarını gösterir gibi görünmektedir.
birisi foo()
arama ve foo.__call__()
arayarak arasındaki ilişkiyi açıklayabilir misiniz? Işlevin davranışını değiştirmek için foo()
ve foo.__call__()
şimdi 5 yerine 6 döndürür bir yolu var mı?
foo .__ call__' değiştirmek için bir neden yoktur asla - sadece yerine 'foo' değiştirebilir! – katrielalex
yine de garip bir davranış. fonksiyonları nesnelerdir ve bunlar ('') vb aittir sınıf var beri, biz hiç önemli değil burada bir işlevle çalıştığınızdan nasıl gerçeği hakkında ayrıntılı gerektiğini –