2

次のコード スニペットを検討してください。

class MyClass(object):
  @property
  def foo(self):
    return self._foo      

l = [my_class1, my_class2]

min(l, key=MyClass.foo) # doesn't work because foo is not callable. 
                        # "TypeError: 'property' object is not callable"

それを機能させる方法はありますか?

4

2 に答える 2

4

使用operator.attrgetter:

min(l, key=operator.attrgetter('foo'))

例:

>>> class MyClass(object):
...     def __init__(self, val):
...         self._foo = val
...     def __repr__(self):
...         return 'MyClass({})'.format(self._foo)
...     @property
...     def foo(self):
...         return self._foo
... 
>>> import operator
>>> min([MyClass(3), MyClass(1), MyClass(2)], key=operator.attrgetter('foo'))
MyClass(1)
于 2013-11-12T06:48:40.920 に答える
3

ラムダ式を使用して、属性であるかのように foo にアクセスできます。

min(l, key=lambda o: o.foo)
于 2013-11-12T06:46:17.143 に答える