python - python中如何通过函数实例调用成员函数?

标签 python

假设我们有以下代码:

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/

相关文章:

python - Pycaret - 卡在设置上()

python - numpy 中的高效向量选择

Python:根据其他两列(包括负值)有条件地创建新列

python - PAHO MQTT Python 客户端 - 缺少确认,保证为订户交付

python - cv2.approxPolyDP() , cv2.arcLength() 这些是如何工作的

python - 简单的Python继承

python - BeautifulSoup4循环找不到后续元素

python - 在不带前导 0 的文本字符串中查找 float

python - 打印函数如何在 if 语句条件下工作?

python - 如何从 python 中的列表中提取某些值?