Автор оригинала: Pankaj Kumar.
Python setattr ()
Функция используется для установки атрибута объекта, учитывая его имя. Будучи очень простой функцией, она может оказаться очень полезной в контексте Объектно-ориентированное программирование в Python Отказ Посмотрим, как мы могли бы использовать эту функцию в наших программах Python.
SetAttr () Синтаксис функции
Он принимает имя объекта, имя атрибута и значение в качестве параметров, а наборы объект.attribute
быть равным ценность
Отказ Поскольку любой атрибут объекта может иметь любой тип, никакое исключение не поднимается этой функцией.
Формат : setattr (объект, attr, value)
Вот простой пример, чтобы продемонстрировать использование setattr ()
Отказ
class MyClass(): def __init__(self, name, value): # Set the attribute of the class object setattr(self, name, value) a = MyClass('KEY', 100) print('Printing attribute from Class Object:', a.KEY) print('Printing attribute from getattr():', getattr(a, 'KEY'))
Выход
Printing attribute from Class Object: 100 Printing attribute from getattr(): 100
setattr ()
Очень полезно, когда атрибут объекта не знаю заранее, и не может быть установлен с использованием object.attribute_name
Отказ
Это очень удобный метод, используется всякий раз, когда атрибуты объекта могут измениться во время выполнения, и демонстрирует, как объектно-ориентированное программирование все еще хорошо выполняется в этих сценариях.
Использование SetAttr () с getattrr ()
Обычно используется в тандеме с getattr ()
Метод, чтобы получить и установить атрибуты объектов.
Вот пример, чтобы продемонстрировать некоторые из используемых случаев setattr ()
, когда сочетается с getattr ()
метод.
В этом примере строятся объекты и устанавливают атрибуты каждого предмета на соответствующие метки для одного студента.
После построения студенческого объекта, используя setattr ()
мы используем getattr ()
и сортировать предметы-мудрые отметки студентов.
class Student(): def __init__(self, name, results): self.name = name for key, value in results.items(): # Sets the attribute of the 'subject' to # the corresponding subject mark. # For example: a.'Chemistry' = 75 setattr(self, key, value) def update_mark(self, subject, mark): self.subject = mark subjects = ['Physics', 'Chemistry', 'Biology'] a = Student('Amit', {key: value for (key, value) in zip(subjects, [73, 81, 90])}) b = Student('Rahul', {key: value for (key, value) in zip(subjects, [91, 89, 74])}) c = Student('Sunil', {key: value for (key, value) in zip(subjects, [59, 96, 76])}) student_list = [a, b, c] stud_names = [student.name for student in student_list] print('Sorted Physics Marks:') print(sorted([getattr(s, 'Physics') for s in student_list])) print('\nSorted Marks for all subjects:') print(sorted([getattr(s, subject) for s in student_list for subject in subjects])) print('\nSorted Marks for every Student:') print(dict(zip(stud_names, [sorted([getattr(s, subject) for subject in subjects]) for s in student_list])))
Хотя некоторые из одноиналнинги Python могут показаться очень сложными, это не так. Первый отсортировано ([Getattr (S, 'PhysiciCs ») для S в Student_List])
эквивалентно:
ls = [] for s in student_list: ls.append(getattr(s, 'Physics')) # Sort the list ls.sort() print(ls)
Второе вкладыш также чрезвычайно похоже, но использует два вложенных петель вместо одного.
ls = [] for s in student_list: for subject in subjects: ls.append(getattr(s, subject)) ls.sort() print(ls)
Последний это немного сложно, где вы строите словарь Имя: сортируется_subject_marks
для каждого студента.
Мы сначала повторяемся через каждое имя и получаем атрибут из списка объектов Student, а затем сортировать промежуточный список, прежде чем добавлять в наш словарь.
dct = {} for name, s in zip(subjects, student_list): ls = [] for subject in subjects: ls.append(getattr(s, subject)) ls.sort() dct[name] = ls print(dct)
Выход полного фрагмента кода:
Sorted Physics Marks: [59, 73, 91] Sorted Marks for all subjects: [59, 73, 74, 76, 81, 89, 90, 91, 96] Sorted Marks for every Student: {'Amit': [73, 81, 90], 'Rahul': [74, 89, 91], 'Sunil': [59, 76, 96]}
Заключение
В этой статье мы узнали о setattr ()
Метод, который используется для динамической установки атрибутов объекта во время выполнения. Это очень полезный метод для объектно-ориентированного программирования, когда атрибуты не известны разработчику, и, таким образом, используется для создания гибких API.