Переменные класса: продолжение
Мы уже говорили Вам, что переменные класса существуют, даже если экземпляр класса (объект) не был создан.
Теперь мы воспользуемся возможностью, чтобы показать Вам разницу между этими двумя переменными __dict__
, из класса и из объекта. р>
Посмотрите на код в редакторе. Вот доказательство.
Давайте внимательнее посмотрим на него:
- мы определяем один класс с именем
ExampleClass
; - класс определяет одну переменную класса с именем
varia
; - конструктор класса присваивает переменной значение параметра;
- наименование переменной является наиболее важным аспектом примера, потому что:
- изменение присваивания на
self.varia = val
приведет к созданию переменной экземпляра с тем же именем, что и у класса; - изменение присваивания на
varia = val
будет работать с локальной переменной метода; (мы настоятельно рекомендуем Вам протестировать оба вышеупомянутых случая - Вам будет легче запомнить разницу); - первая строка внеклассного кода печатает значение атрибута
ExampleClass.varia
; примечание: мы используем значение до того, как будет создан самый первый объект класса.
Запустите код в редакторе и проверьте его вывод.
Как видите, класс __dict__
содержит гораздо больше данных, чем аналог его объекта. Большинство из них сейчас бесполезны - те, которые мы хотим, чтобы Вы тщательно проверили, показывает текущее значение varia
.
Обратите внимание, что объект __dict__
пуст - у объекта нет переменных экземпляра.