首页 新闻 会员 周边

请问python中,一个变量p指向一个类的实例,然后可以调用p(参数),这是python的什么语言特性,谢谢

0
悬赏园豆:30 [已解决问题] 解决于 2018-11-16 09:49

代码如下:

p = np.poly1d([1, 2, 3])
p(0.5)

原文出处:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.poly1d.html

poly1d是一个类名,p应该是指向这个类的一个实例,p(0.5)看起来是调用了一个方法,python中是不是有这样的语言特性:通过实例名称找到一个默认的方法?谢谢

会长的主页 会长 | 专家六级 | 园豆:12401
提问于:2018-11-16 09:41
< >
分享
最佳答案
0

实现__call__函数

会长 | 专家六级 |园豆:12401 | 2018-11-16 09:49
其他回答(1)
0

call
一个对象实例可以有自己的属性和方法,当我们调用实例方法时,我们用instance.method()来调用。能不能直接在实例本身上调用呢?在Python中,答案是肯定的。

任何类,只需要定义一个__call__()方法,就可以直接对实例进行调用。请看示例:

class Student(object):
def init(self, name):
self.name = name

def __call__(self):
    print('My name is %s.' % self.name)

调用方式如下:

s = Student('Michael')
s() # self参数不要传入
My name is Michael.
call()还可以定义参数。对实例进行直接调用就好比对一个函数进行调用一样,所以你完全可以把对象看成函数,把函数看成对象,因为这两者之间本来就没啥根本的区别。

如果你把对象看成函数,那么函数本身其实也可以在运行期动态创建出来,因为类的实例都是运行期创建出来的,这么一来,我们就模糊了对象和函数的界限。

huang007 | 园豆:231 (菜鸟二级) | 2018-11-16 09:51

谢谢你啊,我结贴的时候没看见你的答案,不好意思,没给你园豆。你有没有觉得python的语法怪怪的?为了快捷搞出很多套路

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2018-11-16 09:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册