Программа курса:
Атрибуты экземпляра класса
.jpg)
Все действия, которые применяются к классу, аналогично применимы и к экземплярам класса (далее ЭК). Основное различие заключается в том, что при работе с ЭК синтаксис изменяется незначительно — вместо имени класса используем переменную, которая ссылается на ЭК.
Например:
instance_name.attribute_name
Где instance_name
— это сам экземпляр класса, а attribute_name
— имя атрибута, к которому мы обращаемся. Например:
class MyClass:
attribute = 'значение'
instance = MyClass()
print(instance.attribute) # Выведет 'значение'
Помните, что атрибуты класса принадлежат самому классу, и при создании ЭК эти атрибуты не копируются в сам экземпляр, а ссылаются на атрибуты класса. Например:
class MyClass:
name = 'Класс'
instance = MyClass()
print(instance.name) # Выведет 'Класс'
Однако, если изменить атрибут через ЭК, то это изменение отразится только в самом экземпляре и будет записано в его пространстве имён (словаре атрибутов):
instance.name = 'Экземпляр'
print(instance.name) # Выведет 'Экземпляр'
print(MyClass.name) # Выведет 'Класс'
Важно отметить, что изменение атрибута через ЭК не затрагивает атрибут класса, так как изменения производились на уровне экземпляра.
Независимость атрибутов у разных экземпляров
Теперь посмотрим, как ведут себя атрибуты у разных экземпляров класса:
instance2 = MyClass()
print(instance2.name) # Выведет 'Класс'
instance2.name = 'Другой экземпляр'
print(instance2.name) # Выведет 'Другой экземпляр'
print(instance.name) # Выведет 'Экземпляр'
Как видно, атрибуты двух экземпляров работают независимо друг от друга. Любые изменения затрагивают только конкретный экземпляр, к которому мы обратились. В то же время, изменения в атрибутах самого класса будут отражаться на всех экземплярах, которые используют эти атрибуты по умолчанию.
Вот таблица, описывающая работу с атрибутами экземпляров и классов:
Операция | Синтаксис/Функция | Пример | Вывод |
---|---|---|---|
Доступ к атрибутам экземпляра | instance_name.attribute_name | instance.attribute | 'значение' |
Ссылки на атрибуты класса через экземпляр | Атрибут экземпляра ссылается на атрибут класса | instance.name | 'Класс' |
Изменение атрибута через экземпляр | Создаётся атрибут в экземпляре | instance.name = 'Экземпляр' | instance.name = 'Экземпляр' , MyClass.name = 'Класс' |
Независимость атрибутов у разных экземпляров | Каждый экземпляр может иметь своё значение | instance2.name = 'Другой экземпляр' | instance.name = 'Экземпляр' , instance2.name = 'Другой экземпляр' |
Влияние удаления атрибута экземпляра | При удалении атрибута экземпляра используется атрибут класса | del instance.name , print(instance.name) | 'Класс' (атрибут экземпляра удалён, используется атрибут класса) |
Влияние удаления атрибута
Если у экземпляра и класса имеются атрибуты с одинаковыми именами, и атрибут экземпляра был удалён, то при обращении к этому атрибуту будет использовано значение из класса:
del instance.name
print(instance.name) # Выведет 'Класс', так как атрибут экземпляра удалён
Комментарии
Ограниченный доступ
Вы можете только просматривать лекции, так как данный курс является платным. Чтобы получить полный доступ к курсу, приобретите его!