在Python中调用多个实例的方法

时间:2014-01-16 07:06:39

标签: python

有这样的事情:

a,b,c = a,b,c.method()

这只是一个例子,我想知道最简单的方法

3 个答案:

答案 0 :(得分:7)

不是那么简短,但如果我理解你的话,那就行了:

a, b, c = (x.method() for x in (a, b, c))

(注意,如果abc指的是同一个对象,则该方法将被调用几次。)

答案 1 :(得分:5)

不短。但是这里有一个使用operator.methodcaller的替代方案。

a, b, c = map(operator.methodcaller('method'), (a,b,c))

示例:

>>> import operator
>>> a, b, c = [1,2,3], [4,5,6], [7,8,9]
>>> a, b, c = map(operator.methodcaller('pop'), (a,b,c))
>>> a
3
>>> b
6
>>> c
9

>>> m = operator.methodcaller('pop') # If you call `method` multiple times,
                                     #   keep a reference to the methodcaller
>>> a, b, c = [1,2,3], [4,5,6], [7,8,9]
>>> a, b, c = map(m, (a,b,c))
>>> a
3
>>> b
6
>>> c
9

如果所有对象都是相同类型,则可以使用未绑定方法。例如abc这里列出所有列表实例。因此,您可以使用list.pop代替operator.methodcaller('pop')

例如:

>>> a, b, c = [1,2,3], [4,5,6], [7,8,9] # a, b, c are all `list` objects.
>>> a, b, c = map(list.pop, (a,b,c))
>>> a
3
>>> b
6
>>> c
9

答案 2 :(得分:1)

使用发电机是最简单的方法。例如,如果a,b和c是字符串:

a, b, c = 'asdf', 'quer', 'zxcv'

你想把每个字符串的开头大写,你可以这样做:

a, b, c = (x.capitalize() for x in (a, b, c))