Функция Python setattr()

Python3 内置函数Встроенные функции Python3


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

Ожидаемый вывод:

Tom
20
Beijing
Tom

Анализ кода:

  1. setattr(obj, 'name', 'Tom')Эквивалентноobj.name = 'Tom'。
  2. Имя атрибута передаётся как строка, что позволяет задавать его динамически.
  3. Можно использовать с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

Ожидаемый вывод:

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')}")

Ожидаемый вывод:

{'brand': 'Toyota'}
{'brand': 'Toyota', 'model': 'Camry', 'year': 2024}
品牌: Toyota

setattr()Обычно используется сgetattr()、hasattr()、delattr()вместе, образуя полный набор инструментов для операций с атрибутами.


Python3 内置函数Встроенные функции Python3


Другие расширения