2016-11-18 17 views
1

У меня есть класс, например, так:Как передать имя переменной класса функции?

class Student: 
    self.name 
    self.email 
    self.age 
    self.ssn 

Я хочу создать функцию вне класса, который может принимать одно из переменных класса в качестве аргумента, так что-то вроде этого:

def print_all_vars(list_of_objects, class_var): 
    for obj in list_of_objects: 
     print obj.class_var 

print_all_vars(students, name) 
print_all_vars(students, ssn) 

... и если бы этот код работал, он печатал все имена студентов, за которыми следовали все номера ssn.

Однако я не пытаюсь передать данные внутри name и ssn, а только имена переменных. Очевидно, что использование строк «имя» и «ssn» не является решением.

Возможно ли это? Если да, то как я мог реализовать что-то вроде этого?

ответ

2

Для этого вы можете использовать встроенный метод getattr. Вот print_all_vars с getattr.

def print_all_vars(list_of_objects, class_var): 
    for obj in list_of_objects: 
     print getattr(obj, class_var) 

Сразу отметим, что использовать его, class_var должен быть строкой (например, print_all_vars(students, "name")).

+1

Это именно то, что мне нужно! Огромное спасибо. – Grav

Смежные вопросы