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

2019-01-02 21:26发布

问题:

代码如下:

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中是不是有这样的语言特性:通过实例名称找到一个默认的方法?谢谢

回答1:

实现__call__函数



回答2:

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()还可以定义参数。对实例进行直接调用就好比对一个函数进行调用一样,所以你完全可以把对象看成函数,把函数看成对象,因为这两者之间本来就没啥根本的区别。

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



标签: