Доброго времени суток, читатели, зрители моего канала programmer's notes.
Приложение к уроку
Иерархия переменных
Мы уже говорили о статических переменных. Разница между статической переменной и переменной (свойством) объекта заключается в том, что переменная объекты действует только внутри его. У каждого объекта свои свойства. А вот статическая переменная одинакова доступна всем объектам. В Python, однако, пошли гораздо дальше, статическая переменная там, в сущности глобальная переменная, доступ к которой осуществляется через имя класса (см. программу ниже).
В программе nmclass это та самая статическая переменная. Доступ к которой возможен и из объектов и просто в программе. Тогда как переменная объекта self.nm имеет свое значение для каждого объекта, если она в нём определена.
Результат выполнения программы
Петров
1A
2B
5A
5A
Конечно, может возникнуть вопрос, а зачем нам вообще статическая переменная, если она в сущности является обычной глобальной переменной. В данном случае, у меня нет исчерпывающего ответа. Разве что появляется возможность разбивать глобальные переменные, по так называемым пространствам имен. Ну чтож, это тоже дело.
Замечание 1.
Еще один важный нюанс. К статической переменной можно обращаться и через имя объекта класса, где определена статическая переменная (см. программу). Но, если мы напишем выражение типа p1.nmclass = 'qwerty', то эта запись будет означать не обращение к статической переменной, а создание локальной переменной, которая уже будет закрывать в объекте доступ к статической переменной.
Замечание 2
Более развёрнуто: все глобальные переменные можно разбить на модули, в которых они определены, а внутри модуля на классы. Вот такая выходит загогулина.
Обращусь также к уже известному вопросу о глобальных и локальных переменных. И здесь методы в принципе ни чем не отличаются от обычных функций. Там тоже могут быть локальные переменные и глобальные переменные, которые мы также заявляем с помощью директивы global.
Результат выполнения программы
10
1
1
Если закомментировать строку global pr, то получим
10
1
10
Ну пока, всё!
Следующий видеоурок будет посвящён разным типам методов или разным функциям, которые могут существовать внутри класса.
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.