Работа с атрибутами класса

В этом уроке мы подробно поговорим о том, как работать с атрибутами класса, и разберем, как выполнять следующие операции над ними:

  • Доступ к атрибуту
  • Создание атрибута
  • Изменение атрибута
  • Проверка наличия атрибута
  • Удаление атрибута

 

Доступ к атрибутам класса

Атрибуты класса — это переменные, определенные внутри класса, которые могут хранить данные, общие для всех экземпляров этого класса. Чтобы получить доступ к атрибутам класса, используется следующая конструкция:

class_name.attribute_name

Где:

  • class_name — имя класса.
  • attribute_name — имя атрибута.

Пример:

class Person:
    name = 'Jared'
    age = 30

print(Person.name)
print(Person.age)

Вывод:

Jared
30


Важное замечание

Если попытаться обратиться к атрибуту, которого не существует в классе, Python сгенерирует исключение AttributeError.

Пример:

class Person:
    name = 'Jared'
    age = 30

print(Person.salary)

Вывод:

AttributeError: type object 'Person' has no attribute 'salary'

Доступ к атрибутам класса с помощью функции getattr

Также доступ к атрибутам класса можно получить, используя функцию getattr(). Она позволяет избежать исключения AttributeError, если атрибут не существует, благодаря необязательному параметру default.

Определение функции:

getattr(object, name, default=None)
  • object — объект, в котором выполняется поиск атрибута.
  • name — строка, имя атрибута.
  • default — значение, которое возвращается, если атрибут не найден (по умолчанию None).

Пример:

class Person:
    name = 'Jared'
    age = 30

print(getattr(Person, 'name'))
print(getattr(Person, 'age'))

Вывод:

Jared
30

Если атрибут отсутствует:

print(getattr(Person, 'color'))  # Атрибут color отсутствует

Вывод:

AttributeError: type object 'Person' has no attribute 'color'

Но если указать значение по умолчанию, ошибки не будет:

print(getattr(Person, 'salary', 'Нет такого атрибута'))
print(getattr(Person, 'salary', 100))
print(getattr(Person, 'age', 50))

Вывод:

Нет такого атрибута
100
30

Проверка наличия атрибута в классе

Чтобы получить список всех атрибутов класса, можно использовать магический атрибут __dict__, который возвращает словарь с атрибутами класса.

Пример:

class Person:
    name = 'Bob'
    age = 35

print(Person.__dict__)

Вывод:

{'__module__': '__main__', 'name': 'Bob', 'age': 35, '__doc__': None, ...}


Использование in для проверки наличия атрибута

Простой способ проверить наличие атрибута — использовать оператор in и словарь __dict__.

Пример:

class Person:
    name = 'Jared'
    age = 30

print('salary' in Person.__dict__)
print('name' in Person.__dict__)
print('age' in Person.__dict__)
print('color' in Person.__dict__)

Вывод:

False
True
True
False


Проверка наличия атрибута с помощью функции hasattr()

Для более удобной проверки наличия атрибута можно использовать функцию hasattr():

hasattr(object, attribute_name)

Пример:

class Person:
    name = 'Jared'
    age = 30

print(hasattr(Person, 'name'))
print(hasattr(Person, 'money'))

Вывод:

True
False

Изменение атрибута класса

Чтобы изменить значение атрибута класса, используется следующая конструкция:

class_name.attribute_name = new_value

Пример:

class Person:
    name = 'Jared'
    age = 30

Person.age = 35
print(Person.age)

Вывод:

35

Создание атрибута класса

Можно создавать новые атрибуты класса, просто присвоив им значения:

class Person:
    name = 'Jared'

Person.salary = 5000
print(Person.salary)

Вывод:

5000

Использование функции setattr для создания или изменения атрибута

Функция setattr() позволяет задать или изменить атрибут класса динамически:

setattr(object, attribute_name, value)

Пример:

class Person:
    name = 'Jared'
    age = 30

setattr(Person, 'salary', 1000)
print(Person.salary)

Вывод:

1000

Удаление атрибута класса

Для удаления атрибута можно использовать оператор del или функцию delattr().

Пример с оператором del:

class Person:
    name = 'Jared'
    age = 30

del Person.age
print(Person.__dict__)

Вывод:

{'__module__': '__main__', 'name': 'Jared', '__doc__': None}

Пример с delattr():

class Person:
    name = 'Jared'
    age = 30

delattr(Person, 'age')
print(Person.__dict__)

Вывод:

{'__module__': '__main__', 'name': 'Jared', '__doc__': None}

Вот таблица, отражающая основные способы работы с атрибутами классов:

ОперацияСинтаксис/ФункцияПримерВывод
Доступ к атрибутам классаclass_name.attribute_namePerson.nameJared
Доступ к атрибутам через getattrgetattr(object, name, default=None)getattr(Person, 'name')Jared
Проверка наличия атрибута через inattribute_name in object.__dict__'name' in Person.__dict__True
Проверка наличия атрибута через hasattrhasattr(object, attribute_name)hasattr(Person, 'name')True
Изменение атрибута классаclass_name.attribute_name = new_valuePerson.age = 3535
Создание нового атрибутаclass_name.attribute_name = valuePerson.salary = 50005000
Создание/изменение через setattrsetattr(object, attribute_name, value)setattr(Person, 'salary', 1000)1000
Удаление атрибута через deldel class_name.attribute_namedel Person.age{'name': 'Jared'}
Удаление атрибута через delattrdelattr(object, attribute_name)delattr(Person, 'age'){'name': 'Jared'}

Эта таблица резюмирует ключевые операции с атрибутами классов: доступ, проверка, изменение, создание и удаление.


Теперь вы знаете, как работать с атрибутами классов: получать их значения, изменять, создавать, удалять, а также проверять их наличие.

Перейти к следующему шагу

Комментарии