为什么要从python代码中的VAIASE错误中删除self?
我正在练习一些kivy教程,代码的和平对我来说是相当混乱的,我只是想解释一下,这样我就可以建立强大的概念为什么要从python代码中的VAIASE错误中删除self?,python,kivy,Python,Kivy,我正在练习一些kivy教程,代码的和平对我来说是相当混乱的,我只是想解释一下,这样我就可以建立强大的概念 from random import random from kivy.app import App from kivy.uix.widget import Widget from kivy.uix.button import Button from kivy.graphics import Color, Ellipse, Line class MyPaintWidget(Widge
from random import random
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.graphics import Color, Ellipse, Line
class MyPaintWidget(Widget):
def on_touch_down(self, touch):
color = (random(), 1,1)
with self.canvas:
Color(*color, made='hsv')
d = 30.
Ellipse(pos=(touch.x-d/2, touch.y-d/2),size=(d,d))
touch.ud['line']= Line(points=(touch.x, touch.y))
def on_touch_move(self, touch):
touch.ud['line'].points += [touch.x, touch.y]
class MyPaintApp(App):
def build(self):
parent = Widget()
self.painter = MyPaintWidget()
#painter = MyPaintWidget()
clearbtn = Button(text="Clear")
clearbtn.bind(on_release=self.clear_canvas)
parent.add_widget(self.painter)
#parent.add_widget(painter)
parent.add_widget(clearbtn)
return parent
def clear_canvas(self, obj):
self.painter.canvas.clear()
if __name__=="__main__":
MyPaintApp().run()
我的问题是,如果你看代码,当我使用这些行作为代码的一部分时,有两行被注释掉了,小部件出现了,我可以毫无问题地画线,但当我按下清除按钮时,它会引发一个错误
"AttributeError: 'MyPaintApp' object has no attribute 'painter'"
使用self.painter添加线条时(不包括以前的线条),效果良好,并清除画布区域
在没有自我的情况下,它会表现出什么样的行为。虽然,我理解self的用法,但是这个时间代码对我来说相当混乱 Python中的表示当前实例。如果您将某些内容分配给self,它将被添加到当前对象中,并且可以被其他方法重用(在本例中:
clear\u canvas
)
如果省略
self
,则painter
变量是局部变量,不会添加到对象中。调用clear\u canvas
将引发异常,因为它需要可访问此变量。painter
是函数的本地变量,self.painter
可以从对象实例中看到…@Jean Françoisfare Fabre感谢您的解释,当我从“self.painter.canvas.clear()中删除self时。”它引发了一个错误“NameError:未定义全局名称'painter'。这意味着,当我创建一个对象绘制器时,它引用类MyPaintApp的当前实例,因此如果没有self,它就像一个孤立变量或对象。如果我错了,请纠正我。