2014-12-03 2 views
0

Я немного смущает выход этой программы:Понимание Переменные экземпляра в Python

class Test(object): 
    a = None 
    b = None 

    def __init__(self, a): 
     print self.a 
     self.a = a 
     self._x = 123; 
     self.__y = 123; 
     b = 'meow' 

Выходы для следующих строк, что запутать меня:

instance = Test(3) #Output is None 
print Test.a #Output is None 
print instance.a #Output is 3. Why does this print 3? 

Я борюсь с тем, почему print Instance.a печатает 3, а две другие строки - нет.

Благодаря

ответ

0
instance = Test(3) #Output is None 

Это значение Нет, потому что вы печатаете self.a, прежде чем он был назначен.

print Test.a #Output is None 

В этом нет None б потому, что вы печатаете в классе, который не был инициализирован еще так что только а = Ни один из определения класса не были обработаны.

print instance.a #Output is 3. Why does this print 3? 

это печатает 3, потому что вы вызываете его на экземпляре Test класса, который вы создали с первым звонком. __init__ была запущена, и модифицированный self.a быть 3, что вы предоставили (он отличается от указанного выше, так как вызова Test.a, метод __init__ не называется, так что вы получите ваше задание из определения класса

0

Обычно один писать экземпляры в нижнем регистре (я установил его)

Для чтения вашей программы

  • ввода INIT
    • я должен печатать self.a:...
      • Имеет ли текущий экземпляр атрибут a? нет.
      • Итак, посмотрите на типы.
      • Есть ли у Test атрибут a? Да, это None.
      • Ok, печать None
    • установить self.a в 3.
      • Имеет ли этот экземпляр атрибут a? нет.
      • ОК создать его и присвоить ему значение 3.
  • Какие a значения по умолчанию для Test объекта? это Нет. Распечатайте его.
  • Какое значение a для этого случая? это 3.

Возьмите более человеческий пример.

Обычно нелюбимых людей называют Джоном Доу.

Кто-то без сознания входит в больницу в 8 утра. Как его зовут? (не знаю, напишем «John Doe»)

Как называется человек, который входит в 8? «Джон Доу»

Он проснулся, эй, как тебя зовут? Я Bob.

Как называется человек, который входит в 8? «Боб»

Когда кто-то бессознательно входит в больницу, как его зовут? «Джон Доу» (не изменился на «Боб»)

Если другой пациент входит, а ее ИД «Алиса», как ее зовут? Возможно "Алиса"

Смежные вопросы