Функция Python setattr()
setattr()— это встроенная функция в Python, используемая для установки атрибутов объекта.
В отличие от прямого использования точечной нотации (.) для присваивания,setattr()это позволяет динамически задавать атрибуты объекта через строки. Это очень полезно, когда нужно устанавливать атрибуты на основе имён переменных или обрабатывать неизвестные атрибуты.
Определение слова: setattrДаset attributeсокращение от "set attribute".
Базовый синтаксис и параметры
Формат синтаксиса
setattr(obj, name, value)
Описание параметра
- Параметр obj:
- Тип: любой объект
- Описание: Объект, атрибут которого нужно задать.
- Имя параметра:
- Тип: String
- Описание: имя атрибута для установки (в виде строки).
- Значение параметра:
- Тип: любое значение
- Описание: значение для установки.
Описание функций
- Возвращаемое значение: Нет возвращаемого значения (возвращает
None)。 - Соответствующая функция: Используется с
getattr()вместе с функцией,getattrиспользуется для получения атрибутов.
Примеры
Пример 1: Базовое использование
Пример
# Создать простой класс
class Person:
pass
# Создать объект
p = Person()
# Использовать setattr для установки атрибутов
setattr(p, 'name', 'Tom')
setattr(p, 'age', 20)
setattr(p, 'city', 'Beijing')
# Проверить, что атрибут установлен
print(p.name) # Вывод: Tom
print(p.age) # Вывод: 20
print(p.city) # Вывод: Beijing
# Использовать getattr для получения атрибутов
print(getattr(p, 'name')) # Вывод: Tom
class Person:
pass
# Создать объект
p = Person()
# Использовать setattr для установки атрибутов
setattr(p, 'name', 'Tom')
setattr(p, 'age', 20)
setattr(p, 'city', 'Beijing')
# Проверить, что атрибут установлен
print(p.name) # Вывод: Tom
print(p.age) # Вывод: 20
print(p.city) # Вывод: Beijing
# Использовать getattr для получения атрибутов
print(getattr(p, 'name')) # Вывод: Tom
Ожидаемый вывод:
Tom 20 Beijing Tom
Анализ кода:
setattr(obj, 'name', 'Tom')Эквивалентноobj.name = 'Tom'。- Имя атрибута передаётся как строка, что позволяет задавать его динамически.
- Можно использовать с
getattr()вместе.
Пример 2: Динамическое задание атрибутов
Пример
class Student:
pass
# Динамически задать несколько атрибутов
student = Student()
fields = ['name', 'age', 'grade', 'school']
values = ['Lily', 18, 'A', 'MIT']
for field, value in zip(fields, values):
setattr(student, field, value)
# Вывести все атрибуты
for field in fields:
print(f"{field}: {getattr(student, field)}")
# Установить несуществующий атрибут
setattr(student, 'major', 'Computer Science')
print(student.major) # Вывод: Computer Science
pass
# Динамически задать несколько атрибутов
student = Student()
fields = ['name', 'age', 'grade', 'school']
values = ['Lily', 18, 'A', 'MIT']
for field, value in zip(fields, values):
setattr(student, field, value)
# Вывести все атрибуты
for field in fields:
print(f"{field}: {getattr(student, field)}")
# Установить несуществующий атрибут
setattr(student, 'major', 'Computer Science')
print(student.major) # Вывод: Computer Science
Ожидаемый вывод:
name: Lily age: 18 grade: A school: MIT Computer Science
Анализ кода:
- Несколько атрибутов можно динамически установить с помощью цикла.
- setattr может добавлять объекту новые атрибуты.
- Это полезно при работе с файлами конфигурации или пользовательским вводом.
Пример 3: Работа с __dict__
Пример
# Просмотр __dict__ объекта
class Car:
def __init__(self):
self.brand = "Toyota"
car = Car()
print(car.__dict__) # Вывод: {'brand': 'Toyota'}
# Использование setattr для добавления атрибутов
setattr(car, 'model', 'Camry')
setattr(car, 'year', 2024)
print(car.__dict__) # Вывод: {'brand': 'Toyota', 'model': 'Camry', 'year': 2024}
# Проверка наличия атрибута
if hasattr(car, 'brand'):
print(f"Бренд: {getattr(car, 'brand')}")
class Car:
def __init__(self):
self.brand = "Toyota"
car = Car()
print(car.__dict__) # Вывод: {'brand': 'Toyota'}
# Использование setattr для добавления атрибутов
setattr(car, 'model', 'Camry')
setattr(car, 'year', 2024)
print(car.__dict__) # Вывод: {'brand': 'Toyota', 'model': 'Camry', 'year': 2024}
# Проверка наличия атрибута
if hasattr(car, 'brand'):
print(f"Бренд: {getattr(car, 'brand')}")
Ожидаемый вывод:
{'brand': 'Toyota'}
{'brand': 'Toyota', 'model': 'Camry', 'year': 2024}
品牌: Toyota
setattr()Обычно используется сgetattr()、hasattr()、delattr()вместе, образуя полный набор инструментов для операций с атрибутами.
Другие расширения
Встроенные функции Python3