В этом уроке мы подробно поговорим о том, как работать с атрибутами класса, и разберем, как выполнять следующие операции над ними:
Атрибуты класса — это переменные, определенные внутри класса, которые могут хранить данные, общие для всех экземпляров этого класса. Чтобы получить доступ к атрибутам класса, используется следующая конструкция:
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_name | Person.name | Jared |
Доступ к атрибутам через getattr | getattr(object, name, default=None) | getattr(Person, 'name') | Jared |
Проверка наличия атрибута через in | attribute_name in object.__dict__ | 'name' in Person.__dict__ | True |
Проверка наличия атрибута через hasattr | hasattr(object, attribute_name) | hasattr(Person, 'name') | True |
Изменение атрибута класса | class_name.attribute_name = new_value | Person.age = 35 | 35 |
Создание нового атрибута | class_name.attribute_name = value | Person.salary = 5000 | 5000 |
Создание/изменение через setattr | setattr(object, attribute_name, value) | setattr(Person, 'salary', 1000) | 1000 |
Удаление атрибута через del | del class_name.attribute_name | del Person.age | {'name': 'Jared'} |
Удаление атрибута через delattr | delattr(object, attribute_name) | delattr(Person, 'age') | {'name': 'Jared'} |
Эта таблица резюмирует ключевые операции с атрибутами классов: доступ, проверка, изменение, создание и удаление.
Теперь вы знаете, как работать с атрибутами классов: получать их значения, изменять, создавать, удалять, а также проверять их наличие.