【发布时间】:2015-03-25 03:42:10
【问题描述】:
我不明白为什么以下代码在 __str__ 方法中返回错误 AttributeError: 'Dice' object has no attribute 'die1'。我知道我已经创建了一个,并且我的调试器将它显示为一个类属性。这个(简单)代码有什么问题?
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在设置die1之前在您的类实例(您将其作为self传递给它)上调用了__str__。 -
感谢您指出双重构造函数调用,经过一夜睡眠,我自己也注意到了!然而,ekhumoro 解决了这个问题!谢谢!愿意进一步评论吗?我正在从 PyQt4 切换到 PyQt5,并且总是在我的代码之外编译 ui。我以为我需要在设置信号之前加载 ui,这是真的吗?另外为什么 loadUi 会在我的类上调用 str 方法?
-
如果你在 python 3x 上,你可以在没有类的情况下调用父方法。 ''super().__init__(父)''
标签: python python-3.x pyqt5