Module (36%)
Section (56%)

Переменные класса: продолжение

Мы уже говорили Вам, что переменные класса существуют, даже если экземпляр класса (объект) не был создан.

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

Посмотрите на код в редакторе. Вот доказательство.

Давайте внимательнее посмотрим на него:

  1. мы определяем один класс с именем ExampleClass;
  2. класс определяет одну переменную класса с именем varia;
  3. конструктор класса присваивает переменной значение параметра;
  4. наименование переменной является наиболее важным аспектом примера, потому что:
    • изменение присваивания на self.varia = val приведет к созданию переменной экземпляра с тем же именем, что и у класса;
    • изменение присваивания на varia = val будет работать с локальной переменной метода; (мы настоятельно рекомендуем Вам протестировать оба вышеупомянутых случая - Вам будет легче запомнить разницу);
  5. первая строка внеклассного кода печатает значение атрибута ExampleClass.varia; примечание: мы используем значение до того, как будет создан самый первый объект класса.
 

Запустите код в редакторе и проверьте его вывод.

Как видите, класс __dict__ содержит гораздо больше данных, чем аналог его объекта. Большинство из них сейчас бесполезны - те, которые мы хотим, чтобы Вы тщательно проверили, показывает текущее значение varia.

Обратите внимание, что объект __dict__ пуст - у объекта нет переменных экземпляра.



Code

class ExampleClass:
varia = 1
def __init__(self, val):
ExampleClass.varia = val


print(ExampleClass.__dict__)
example_object = ExampleClass(2)

print(ExampleClass.__dict__)
print(example_object.__dict__)
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×