pythonに対する特殊関数call_()の使用詳細


同前コールバック
Pythonでは、関数はオブジェクトです。

>>> f = abs
>>> f.__name__
'abs'
>>> f(-123)
fは呼び出し可能であるため、fは呼び出し可能オブジェクトと呼ばれる。
すべての関数は呼び出し可能なオブジェクトです。
クラスの例を呼び出し可能なオブジェクトに変更することもできます。特殊な方法を実装するだけでいいです。コールコール。
私たちはPersonクラスを呼び出し可能なオブジェクトに変えました。

class Person(object):
  def __init__(self, name, gender):
    self.name = name
    self.gender = gender

  def __call__(self, friend):
    print 'My name is %s...' % self.name
    print 'My friend is %s...' % friend
Personのインスタンスに対して直接的に呼び出すことができます。

>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...
p('Tim')だけを見ても、pが関数かクラスのインスタンスかは分かりません。だから、Pythonでは関数も対象です。オブジェクトと関数の違いはあまり顕著ではありません。
ジョブ
前に定義されたフィボナッチの数列を改善します。

class Fib(object):
  ???
_を一つ入れてくださいコールバックメソッドは、より簡単に呼び出すことができます。

>>> f = Fib()
>>> print f(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
実例となるオブジェクトを類似の関数として表現することができ、さらに関数とオブジェクトの間の概念をぼかします。

class Fib(object):
  def __init__(self):
    pass
  def __call__(self,num):
    a,b = 0,1;
    self.l=[]
    
    for i in range (num):
      self.l.append(a)
      a,b= b,a+b
    return self.l
  def __str__(self):
    return str(self.l)
  __rept__=__str__
      
f = Fib()
print f(10)
以上のこの対python特殊関数_u ucall_()私たちは皆さんにすべての内容を共有しています。参考にしていただければと思います。よろしくお願いします。