Python: В чем разница между глобальной переменной, переменной с префиксом «self» и локальной переменной? - PullRequest
2 голосов
/ 27 декабря 2011

В течение многих лет я знаком с синтаксисом, подобным C / C ++ / Java, и способ определения переменных Python просто смущает меня. Кто-нибудь может описать, какие различия есть среди трех, упомянутых в д?

Ответы [ 3 ]

6 голосов
/ 27 декабря 2011

Глобальная переменная - это переменная, доступная глобально.Локальная переменная - это переменная, которая доступна только для текущей области, например, временные переменные, используемые в определении одной функции.Переменная экземпляра (например, при использовании префикса self.) - это данные, связанные с конкретным экземпляром объекта.Конечно, вы также можете ссылаться на объекты экземпляра вне объекта, используя object.x, где object является ссылкой на этот объект.

Если переменная имеет префикс self, она не является ни локальной, ни глобальной.Это часть состава конкретного экземпляра объекта.Грубо говоря, переменная экземпляра представляет собой свойство конкретного объекта.

В следующем примере lx является локальной переменной, локальной для метода greet.gx - это глобальная переменная, доступная в любом месте модуля, ix - это переменная экземпляра, которая может иметь уникальное значение для каждого экземпляра объекта.При ссылке внутри определения объекта вы будете ссылаться на ix с префиксом self, а вне объекта с префиксом ссылки на объект.

gx = "hello"
class Foo:
    def __init__(self, who):
        self.ix = who
    def greet(self):
        lx = "%s, %s" % (gx, self.ix)
        return lx

foo = Foo("world")
print foo.greet()
print foo.ix
3 голосов
/ 28 декабря 2011

Иногда действительно полезно вернуться к первым принципам:

Когда мы говорим о переменной, являющейся локальной или глобальной, мы имеем в виду ее «область действия» (или контекст).Переменные внутри функции считаются локальными для функции.Вот иллюстрации из превосходного руководства Swaroop, ' A Byte of Python ':

x = 50

def func(x):
    print('x is', x)
    x = 2
    print('Changed local x to', x)

func(x)
print('x is still', x)

output:

x равен 50

Изменен локальный x на 2

x по-прежнему 50

Далее приведена иллюстрация того, как global переменная пересекает контекст внутри и снаружи функции:

x = 50

def func():
    global x

    print('x is', x)
    x = 2
    print('Changed global x to', x)

func()
print('Value of x is', x)

вывод:

x равен 50

Изменено глобальное x2

Значение x равно 2

Это все, что нужно.

Когда мы используем аспекты объектно-ориентированного программированияPython, тогда понятие « self » становится актуальным.Экземпляры и экземпляры класса считаются «объектами» и « self ».Префикс позволяет нашему коду различать, ссылаемся ли мы на локальную / глобальную переменную или на атрибуты объекта.

Еще раз, с дзен-подобной простотой концепция объясняется Swaroop .

3 голосов
/ 27 декабря 2011

self работает так же, как this из C ++ и Java. Вы получаете ссылку на объект, к которому затем можете обратиться с помощью оператора . (-> в C ++).

В Python единственный способ доступа к переменным экземпляра - явно через self. Переменные экземпляра не размещены в той же «нормальной» области видимости, что и локальные или глобальные переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...