Рубрики
Без рубрики

Функция Python Setattr ()

Функция Python Setattr () используется для установки атрибута объекта, учитывая его имя. Будучи очень простой функцией, она может оказаться очень полезной в

Автор оригинала: 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.

Рекомендации