Его все о scope, так как text
объявлен снаружи, свободный от любого класса или функции, его можно достичь из любого места. Чтобы получить лучшее представление, рассмотрим эти два примера:
#!/usr/bin/env python
text = "why is this seen?"
class Foo:
def doit(self):
text = "this is changed"
print(text)
x = Foo()
x.doit()
print text
В приведенном выше примере, мы перезаписать переменную text
локально, в Foo
, класс, но глобальный экземпляр текста одно и то же. Но в данном случае:
#!/usr/bin/env python
text = "why is this seen?"
class Foo:
def doit(self):
global text
text = "this is changed"
print(text)
x = Foo()
x.doit()
print text
Мы заявляем, что мы хотим версию текста global
, а затем мы можем изменить его.
НО: global
переменных неодобрение, рассмотреть возможность использования входных аргументов для функций и возвращения новых значений вместо того, чтобы переменные глобально доступных везде
Правильного способ сделать это:
#!/usr/bin/env python
class Foo:
text = "why is this seen?"
def doit(self):
print(self.text)
x = Foo()
x.doit()
Есть text
инкапсулирован в классе!
Глобальное ключевое слово * только необходимо *, когда вы назначаете к глобальной переменной внутри функции, но если вы присваивая ему один раз, она становится локальной переменной (даже если она используется перед назначением). Если вы не назначаете это, python будет рассматривать его как глобальную переменную. –