它整天都很好地突然停了下来。我不相信我改变了代码,也许我的大脑停止了工作???
class BorderWidgetWithLabel(BorderWidget):
def __init__(self, **kwargs):
super(BorderWidgetWithLabel, self).__init__(**kwargs)
self.text=" "
self.text=kwargs.get('text',' ')
print self.text
self.txt_bg_color=kwargs.get("txt_bg_color", [0,0,0,0])
self.bg_color=kwargs.get("bg_color", [0,0,0,0])
self.bind(pos=self.update_canvas)
self.bind(size=self.update_canvas)
self.update_canvas()
def update_canvas(self, *args):
#need to reset everything
self.canvas.clear()
with self.canvas:
get_color(self.border_color)
if(self.text!=""):
texture=simple_text_texture(self.text)
问题:
/typeclasses/borderwidget.py", line 75, in update_canvas
if(self.text!=""):
AttributeError: 'BorderWidgetWithLabel' object has no attribute 'text'
我开始收到错误,我在self.text=" "
中添加了__init__
以及在update_canvas中添加了if语句。我做错了什么?
如果我摆脱了self.text的所有用途,那么print self.text没有问题。
UPDATE ::通过添加text =''作为类变量来修复。这有必要??或者代码有问题。由于 init 中的print self.text在没有类变量的情况下工作正常,我无法提供不太完整的样本
UPDATE ::我删除了 init 的self.update_canvas()最后一行,它没有使用类变量,但是我尝试使用以下内容重现它
class SomeClass:
def __init__(self, **kwargs):
self.text=kwargs.get("text","hello")
self.update_class()
def update_class(self, *args):
if(self.text!=' '):
print self.text
SomeClass()
我不知道为什么我无法再现它
答案 0 :(得分:1)
所以,看起来你有
class BW:
def __init__(self):
self.update_canvas()
def update_canvas(self):
pass
class BWL(BW):
def __init__(self):
super(BWL, self).__init__()
self.text = 'text'
self.update_canvas()
def update_canvas(self):
print self.text
运行BWL()
会抛出您列出的异常。这是因为事件的顺序是
即使没有错误,这可能也不是你想要的...可能会删除对super的调用或对子进程中update_canvas的调用,并在调用超类之前在update_canvas方法中设置所需的属性。 / p>