init__ ve __call__ arasındaki fark nedir?

initvecall__` yöntemleri arasındaki farkı bilmek istiyorum.

Örneğin:

class test:

  def __init__(self):
    self.a = 10

  def __call__(self): 
    b = 20
Çözüm

İlki yeni oluşturulan nesneyi başlatmak için kullanılır ve bunu yapmak için kullanılan argümanları alır:

class Foo:
    def __init__(self, a, b, c):
        # ...

x = Foo(1, 2, 3) # __init__

İkincisi fonksiyon çağrı operatörünü uygular.

class Foo:
    def __call__(self, a, b, c):
        # ...

x = Foo()
x(1, 2, 3) # __call__
Yorumlar (6)

Meta-sınıfta özel bir __call__() yöntemi tanımlamak, sınıf örneğinin her zaman örneğin kendisini değiştirmeden bir işlev olarak çağrılmasına olanak tanır.

In [1]: class A:
   ...:     def __init__(self):
   ...:         print "init"
   ...:         
   ...:     def __call__(self):
   ...:         print "call"
   ...:         
   ...:         

In [2]: a = A()
init

In [3]: a()
call
Yorumlar (1)

initmetodu Kurucu olarak ele alınırken,callmetodu nesnelerle istenilen sayıda çağrılabilir. Heminithem decall` fonksiyonları varsayılan argümanlar alır.

Yorumlar (0)