在 class 实例上执行 class 方法列表
Perform list of class methods on instance of class
如果您有一个 class 有多个方法,例如
class A:
def a(self):
return 1
def b(self):
return 2
def c(self):
return 3
如何在 A
的实例上调用一系列 A
的方法?我尝试了以下
>>> foo = A()
>>> l = [A.a, A.b, A.c]
当我尝试使用列表推导来调用其中的每一个方法时,出现以下错误
>>> [foo.f() for f in l]
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
[foo.f() for f in l]
File "<pyshell#21>", line 1, in <listcomp>
[foo.f() for f in l]
AttributeError: 'A' object has no attribute 'f'
如果我只看列表中的一项,它应该是一个函数对象
>>> A.a
<function A.a at 0x02F361E0>
那么如何在列表推导中调用实例上的函数呢?它认为我正在尝试调用方法 f
,而不是让 f
获取 l
.
中每个函数对象的值
我期望的输出是
[1, 2, 3]
我似乎已经弄明白了,但我会 post 一个答案,以防其他人遇到这个问题。方法列表必须从实例本身创建
>>> foo = A()
>>> l = [foo.a, foo.b, foo.c]
>>> [f() for f in l]
[1, 2, 3]
区别在于这些方法现在实际上绑定到A
实例
>>> foo.a
<bound method A.a of <__main__.A object at 0x02F381B0>>
>>> A.a
<function A.a at 0x02F361E0>
也可以将 foo
对象作为第一个 (self
) 参数传递:
In [1]: class A:
...: def a(self):
...: return 1
...: def b(self):
...: return 2
...: def c(self):
...: return 3
...:
In [2]: foo = A()
In [3]: l = [A.a, A.b, A.c]
In [4]: [f(foo) for f in l]
Out[4]: [1, 2, 3]
如果您有一个 class 有多个方法,例如
class A:
def a(self):
return 1
def b(self):
return 2
def c(self):
return 3
如何在 A
的实例上调用一系列 A
的方法?我尝试了以下
>>> foo = A()
>>> l = [A.a, A.b, A.c]
当我尝试使用列表推导来调用其中的每一个方法时,出现以下错误
>>> [foo.f() for f in l]
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
[foo.f() for f in l]
File "<pyshell#21>", line 1, in <listcomp>
[foo.f() for f in l]
AttributeError: 'A' object has no attribute 'f'
如果我只看列表中的一项,它应该是一个函数对象
>>> A.a
<function A.a at 0x02F361E0>
那么如何在列表推导中调用实例上的函数呢?它认为我正在尝试调用方法 f
,而不是让 f
获取 l
.
我期望的输出是
[1, 2, 3]
我似乎已经弄明白了,但我会 post 一个答案,以防其他人遇到这个问题。方法列表必须从实例本身创建
>>> foo = A()
>>> l = [foo.a, foo.b, foo.c]
>>> [f() for f in l]
[1, 2, 3]
区别在于这些方法现在实际上绑定到A
实例
>>> foo.a
<bound method A.a of <__main__.A object at 0x02F381B0>>
>>> A.a
<function A.a at 0x02F361E0>
也可以将 foo
对象作为第一个 (self
) 参数传递:
In [1]: class A:
...: def a(self):
...: return 1
...: def b(self):
...: return 2
...: def c(self):
...: return 3
...:
In [2]: foo = A()
In [3]: l = [A.a, A.b, A.c]
In [4]: [f(foo) for f in l]
Out[4]: [1, 2, 3]