Области применения в классе в Python - PullRequest
1 голос
/ 03 мая 2011

Пожалуйста, посмотрите на это:

class Car:
    def __init__(self, bid_code):
        self.__bid = bid_code

    def doit(self, cry):
        self.bid_it = cry

    def show_bid(self):
        print self.__bid

    def show_it(self):
        print self.bid_it

a = Car("ok")
a.show_bid()
a.doit("good")
a.show_it()

Какова область действия bid_it здесь? Я думал, что это локальная переменная, потому что она находится внутри блока def. Как это возможно, что я могу вызвать его вне функции? Я не объявил, что bid_it является глобальным.

Спасибо

Ответы [ 2 ]

5 голосов
/ 03 мая 2011

Используя self, вы привязываете его к экземпляру. Теперь это переменная экземпляра. Переменные экземпляра являются локальными для своих экземпляров. Если бы переменная была несвязанной (без собственного префикса), она имела бы область действия функции и выходила бы из области видимости после завершения вызова метода, но вы связали ее с чем-то другим (экземпляром).

0 голосов
/ 03 мая 2011
def doit(self, cry):
    self.bid_it = cry

'self' действует как указатель this в c ++, в данном случае ссылка на объект Car.Если bid_it не определен в self, он создается на лету и ему присваивается значение.Это означает, что вы можете создать его где угодно, если у вас есть ссылка на ваш объект.

...