Python进阶五中,如何自定义实现类的__call__方法?
- 内容介绍
- 文章标签
- 相关推荐
本文共计374个文字,预计阅读时间需要2分钟。
在Python中,函数实际上是一个对象:1+f=abs 2+f.__name__ 3+'abs' 4+f(-123) 5+123 由f的可调用性可知,f被称为可调用对象。所有的函数都是可调用对象。一个类实例也被称为可调用对象。
python中 __call__
在Python中,函数其实是一个对象:
1 >>> f = abs 2 >>> f.__name__ 3 ‘abs‘ 4 >>> f(-123) 5 123
由于f可以被调用,所以,f被称为可调用对象。
所有的函数都是可调用对象。
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
我们把Person类变成一个可调用对象:
1 class Person(object): 2 def __init__(self, name, gender): 3 self.name = name 4 self.gender = gender 5 6 def __call__(self, friend): 7 print ‘My name is %s...‘ % self.name 8 print ‘My friend is %s...‘ % friend
现在可以对Person实例直接调用:
1 >>> p = Person(‘Bob‘, ‘male‘) 2 >>> p(‘Tim‘) 3 My name is Bob... 4 My friend is Tim...
任务
改进一下前面定义的斐波那契数列:
class Fib(object): ???
请加一个__call__方法,让调用更简单:
1 >>> f = Fib() 2 >>> print f(10) 3 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
1 class Fib(object): 2 def __call__(self, num): 3 a, b, L = 0, 1, [] 4 for n in range(num): 5 L.append(a) 6 a, b = b, a + b 7 return L 8 9 f = Fib() 10 print f(10)
本文共计374个文字,预计阅读时间需要2分钟。
在Python中,函数实际上是一个对象:1+f=abs 2+f.__name__ 3+'abs' 4+f(-123) 5+123 由f的可调用性可知,f被称为可调用对象。所有的函数都是可调用对象。一个类实例也被称为可调用对象。
python中 __call__
在Python中,函数其实是一个对象:
1 >>> f = abs 2 >>> f.__name__ 3 ‘abs‘ 4 >>> f(-123) 5 123
由于f可以被调用,所以,f被称为可调用对象。
所有的函数都是可调用对象。
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
我们把Person类变成一个可调用对象:
1 class Person(object): 2 def __init__(self, name, gender): 3 self.name = name 4 self.gender = gender 5 6 def __call__(self, friend): 7 print ‘My name is %s...‘ % self.name 8 print ‘My friend is %s...‘ % friend
现在可以对Person实例直接调用:
1 >>> p = Person(‘Bob‘, ‘male‘) 2 >>> p(‘Tim‘) 3 My name is Bob... 4 My friend is Tim...
任务
改进一下前面定义的斐波那契数列:
class Fib(object): ???
请加一个__call__方法,让调用更简单:
1 >>> f = Fib() 2 >>> print f(10) 3 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
1 class Fib(object): 2 def __call__(self, num): 3 a, b, L = 0, 1, [] 4 for n in range(num): 5 L.append(a) 6 a, b = b, a + b 7 return L 8 9 f = Fib() 10 print f(10)

