Переменные (свойства / атрибуты) класса
Область видимости:
Local -> Enclosing -> Global -> Builtins
name = "Ivan"
class Person:
name = "Dima"
def print_name(self):
print(name)
p = Person()
p.print_name()
# Ivan
12345678910111213
Переменная name
в вызываемом методе print_name
будет искаться в начале локально (Local), потом во вложенных функциях (Enclosing) (их нет в print_name
) потом глобально (Global) - и тут, как раз находит name = "Ivan"
[!warning] Использование nonlocal Это поведение можно избежать, если обозначить переменную, как nonlocal
name = "Ivan"
class Person:
def primer(self):
name = "Dima"
def print_name(self):
nonlocal name # обозначим, что переменная не в локальной области видимости
print(name)
p = Person()
p.print_name()
# Dima
123456789101112131415
[!warning] Применяется только во вложенных функциях nonlocal может применяться только в функциях, имеющих вложенную область видимости.
Вы получаете вложенную область видимости только тогда, когда определяете свою функцию внутри другой функции
Last updated
Was this helpful?