Module (40%)
Section (100%)

Основные тезисы


1. Переменная экземпляра - это свойство, существование которого зависит от создания объекта. У каждого объекта может быть свой набор переменных экземпляра.

Более того, их можно свободно добавлять и удалять из объектов в течение их жизни. Все переменные экземпляра объекта хранятся в специальном словаре с именем __dict__, который содержится в каждом объекте отдельно.


2. Переменная экземпляра может быть скрытой, если ее имя начинается с __, но не забывайте, что такое свойство по-прежнему доступно извне класса с использованием искаженного имени, созданного как _ClassName__PrivatePropertyName.


3. Переменная класса - это свойство, которое существует ровно в одной копии, и для доступа к нему не требуется никаких созданных объектов. Такие переменные не отображаются как содержимое __dict__.

Все переменные класса класса хранятся в специальном словаре с именем __dict__, который содержится в каждом классе отдельно.


4. Функция с именем hasattr() может быть использована для того, чтобы определить, содержит ли объект/класс определенное свойство.

Например:

class Sample: gamma = 0 # Class variable. def __init__(self): self.alpha = 1 # Instance variable. self.__delta = 3 # Private instance variable. obj = Sample() obj.beta = 2 # Another instance variable (existing only inside the "obj" instance.) print(obj.__dict__)

Код выводит:

{'alpha': 1, '_Sample__delta': 3, 'beta': 2}

output



Упражнение 1

Какие свойства класса Python являются переменными экземпляра, а какие - переменными класса? Какие из них скрытые?

class Python: population = 1 victims = 0 def __init__(self): self.length_ft = 3 self.__venomous = False



Упражнение 2

Вы собираетесь присвоить обратное значение свойству __venomous объекта version_2, игнорируя тот факт, что свойство является скрытым. Как Вы это сделаете?

version_2 = Python()


Упражнение 3

Напишите выражение, которое проверяет, содержит ли объект version_2 свойство экземпляра с именем constrictor (да, constrictor!).