加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 10:23:35 所属栏目:Python 来源:网络整理
导读:python中 __call__ 在Python中,函数其实是一个对象: 1 f = abs 2 f. __name__ 3 ‘ abs ‘ 4 f(-123 ) 5 123 由于?f?可以被调用,所以,f?被称为可调用对象。 所有的函数都是可调用对象。 一个 类实例也可以变成一个可调用对象,只需要实现一个特殊方法__c

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,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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读