当前位置 : 主页 > 编程语言 > python >

python进阶五(定制类)【5-8 python中__call__】

来源:互联网 收集:自由互联 发布时间:2021-06-25
python中 __call__ 在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)
网友评论