假设我们有以下代码:
class T(object):
def m1(self, a):
...
f=T.m1
如何在 T 的实例上调用 f?
x=T()
x.f(..)?
f(x, ..)?
最佳答案
成员函数就像任何其他函数一样,除了它需要 self
作为第一个参数,并且有一种机制可以自动传递该参数。
所以,简短的回答是,以这种方式使用它:
class T(object):
def m1(self, a):
pass
f=T.m1
x = T()
f(x, 1234)
未绑定(bind)方法
这是因为您使用的是 T.m1,这是一种“未绑定(bind)方法”。这里未绑定(bind)是指其
self
参数未绑定(bind)到实例。>>> T.m1
<unbound method T.m1>
绑定(bind)方法
不像
T.m1
, x.m1
给你一个绑定(bind)方法:>>> x.m1
<bound method T.m1 of <__main__.T object at 0x0000000002483080>>
您可以引用绑定(bind)方法并使用它而无需传递
self
明确地:f2 = x.m1
f2(1234)
使用
partial
绑定(bind)你也可以做等效的“绑定(bind)”
self
你自己,用这个代码:import functools
unbound_f = T.m1
bound_f = functools.partial(unbound_f, x)
bound_f(1234)
关于python - python中如何通过函数实例调用成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39304103/