2015-02-02 3 views
2

Я пытаюсь назначить переменную в моем внутреннем классе переменной во внешнем классе.Вложенные переменные класса python

class OUTER(QtGui.QWidget): 
    def __init__(self):   
     super (OUTER, self).__init__() 
     self.initUI() 
    def number (self): 
     self.out = 50 
    ... 

    class INNER(QtGui.QLCDNumber) 
     in = OUTER.out #error: NameError: name 'OUTER' is not defined 

     @pyqtSlot() 
     def some_func(self): 
      self.display(self.in) 

Я получаю сообщение об ошибке

NameError: name 'OUTER' is not defined. 

Есть ли способ исправить это?

+0

* Я пытаюсь назначить переменную в моем внутреннем классе переменной на внешнем классе * .... Хорошо. Пожалуйста, продолжайте –

+0

@BhargavRao Ошибка в этой строке: 'in = OUTER.out #error: NameError: name 'OUTER' не определен'. –

ответ

2

Вы не можете этого сделать.

OUTER не определен до тех пор, пока не будет завершена декларация внешнего класса. Классные тела - это исполняемый код; они выполняются во время определения. Когда тело определено, оно присваивается имени, но до тех пор имя не существует.

Это одна из причин, по которой классы вложенности редко являются хорошей идеей в Python. Внутренний класс не получает никакого специального доступа к внешнему классу, поэтому на самом деле нет никакой причины их гнездовать.

Плюс, я только что заметил, что вы пытаетесь обратиться к переменной экземпляра через класс. Это никогда не может работать. OUTER.out не существует, только экземпляры OUTER имеют атрибут out. (Каково было бы значение OUTER.out?)

+0

Спасибо. Теперь это делает чувства – user3335341

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