问题:
代码如下:
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()还可以定义参数。对实例进行直接调用就好比对一个函数进行调用一样,所以你完全可以把对象看成函数,把函数看成对象,因为这两者之间本来就没啥根本的区别。
如果你把对象看成函数,那么函数本身其实也可以在运行期动态创建出来,因为类的实例都是运行期创建出来的,这么一来,我们就模糊了对象和函数的界限。
标签:
Ta的文章
更多文章
0条评论
还没有人评论过~