为什么要从python代码中的VAIASE错误中删除self?

为什么要从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

我正在练习一些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(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,它就像一个孤立变量或对象。如果我错了,请纠正我。