Использование атрибутов класса в качестве параметров функции? - PullRequest
2 голосов
/ 19 октября 2011

Итак, у меня есть рабочий алгоритм сортировки в Python.(Его точное содержание не имеет отношения к этому вопросу.) Он использует список, называемый «люди», содержащий экземпляры классов, и функция жестко закодирована для сортировки этого списка по определенному атрибуту «богатство».1003 * Теперь я хотел бы обобщить функцию, чтобы я мог сортировать по любому атрибуту.

def my_sort2(seq, key):
    # sorts by seq[n].key
    ...
my_sort2(people, wealth)

Но это, конечно, вызывает ошибку, потому что он не знает, что такое «богатство»как атрибут класса.Итак, как это можно сделать?

Ответы [ 2 ]

10 голосов
/ 19 октября 2011

Вы можете передать имя атрибута:

def my_sort2(seq, keyname):
    sort by getattr(seq[n], keyname)

my_sort2(people, 'wealth')

или функтор геттера:

def my_sort2(seq, keyfunc):
    sort by keyfunc(seq[n])

my_sort2(people, operator.attrgetter('wealth'))

Я предпочитаю последний подход, так как он более общий. Например, он легко учитывает вычисляемые ключи.

1 голос
/ 19 октября 2011

Функция получения обобщенного атрибута getattr должна работать:

gettattr(obj, name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...