Вероятно, вы не захотите определять свои атрибуты на уровне класса, а также на уровне экземпляра:
# Definition of the class Student
class Student(object):
# no class attributes
def __init__(self, name, degree, grade):
# these are all instance attributes
self.name = name
self.degree = degree
self.grade = grade
Простой способ получить объект, соответствующий определенным критериям из списка, - использовать фильтр, который вы можете сделать с помощью функции filter()
или просто поместив if
в понимание:
>>> object_list = [Student("Bob", "first", "A"), Student("Biff", "second", "B"), Student("Betty", "third", "C")]
>>> [s for s in object_list if s.name == "Biff"]
[<__main__.Student object at 0x000001855B7D2D60>]
>>> [s for s in object_list if s.name == "Biff"][0].degree
'second'
Если вы хотите использовать имя атрибута в виде строки, вы действительно можете используйте getattr
:
>>> [s for s in object_list if getattr(s, "name") == "Biff"][0].degree
'second'
Однако, если вы делаете что-то подобное, вы, вероятно, захотите использовать обычный dict
вместо объекта:
>>> def student(name, degree, grade):
... return {"name": name, "degree": degree, "grade": grade}
...
>>> object_list = [student("Bob", "first", "A"), student("Biff", "second", "B"), student("Betty", "third", "C")]
>>> [s for s in object_list if s["name"] == "Biff"]
[{'name': 'Biff', 'degree': 'second', 'grade': 'B'}]