Я не понимаю, почему следующий код возвращает ошибку AttributeError: 'Dice' object has no attribute 'die1'
в методе __str__
. Я знаю, что создал его, и мой отладчик показывает его как атрибут класса. Что не так с этим (простым) кодом?Атрибут класса не отображается, как ожидалось
class Dice(QMainWindow) :
"""A game of Dice."""
def __init__(self, parent = None):
"""Build a game with two dice."""
QMainWindow.__init__(self, parent)
super(Dice, self).__init__(parent)
uic.loadUi("Dice.ui", self)
self.die1 = Die()
self.die2 = Die()
self.rollButton.clicked.connect(self.rollButtonClickedHandler)
def __str__(self):
"""String representation for Dice.
"""
return "Die1: %s\nDie2: %s" % (str(self.die1), str(self.die2))
Что, очевидно, не так, что вы '__init__' базового класса дважды (один раз в явном виде и один раз' super' - потерять один из их!), но это не объясняет ошибку, которую вы наблюдаете. –
Ошибка возникает из-за того, что 'loadUi' вызывает' __str__' в экземпляре класса (который вы передали ему как 'self') перед установкой' die1'. – ekhumoro
Спасибо за указание на вызов двойного конструктора, я заметил это сам, после ночного сна! Однако эхуморо прибил проблему! Благодаря! Хотите прокомментировать дальше? Я переключаюсь с PyQt4 на PyQt5 и всегда скомпилировал ui вне моего кода.Я думал, что мне нужно будет загрузить ui перед настройкой сигналов. Это правда? Также почему loadUi вызывает метод str в моем классе? – Arana