Python 删除类的实例

Python 删除类的实例,python,class,instance,code-organization,Python,Class,Instance,Code Organization,我已经在这里问了一个类似的问题,我得到了非常有益的回答。 但从那以后我修改了我的代码,现在我想它更优化了,应该更灵活,但同样的问题仍然存在。我无法删除该类的实例 我试图做的是创建一个圆(单击鼠标左键),然后我希望程序删除这个圆(单击鼠标右键) 还有一个问题。鉴于我只是一个乞丐,我不知道就班级组织而言,我是否选择了正确的方法。它看起来像是一个组织良好的代码,还是我应该在这个阶段更改任何内容?这两行: self.d = Oval() self.can1.create_oval(self.d.x1,

我已经在这里问了一个类似的问题,我得到了非常有益的回答。 但从那以后我修改了我的代码,现在我想它更优化了,应该更灵活,但同样的问题仍然存在。我无法删除该类的实例

我试图做的是创建一个圆(单击鼠标左键),然后我希望程序删除这个圆(单击鼠标右键)

还有一个问题。鉴于我只是一个乞丐,我不知道就班级组织而言,我是否选择了正确的方法。它看起来像是一个组织良好的代码,还是我应该在这个阶段更改任何内容?

这两行:

self.d = Oval()
self.can1.create_oval(self.d.x1, self.d.y1, self.d.x2, self.d.y2, fill='red', width = 2)
创建一个新的
Oval
对象,将该对象分配给名称
self.d
,然后在
self.can1
上创建一个与分配给
self.d
Oval
对象完全无关的椭圆(除了具有相同的维度属性)。相反,我认为你想要:

o = Oval()
self.d = self.can1.create_oval(o.x1, o.y1, o.x2, o.y2, fill='red', width = 2)

这将保留对
画布上对象的引用,因此您可以
删除它。请注意,
Oval
或多或少完全没有意义,因为它所做的只是提供尺寸。

我明白了。我是否应该将创建圆的方法替换为椭圆类?然后从应用程序类中引用它?我不明白你遵循什么逻辑。您可以创建自己类的一个实例
Oval
,同时创建另一个tkinter对象。您从未将
self.d
放在
can1
上。你需要椭圆形
做什么?如果你猜对了OP的意图,我向你致敬。我仍然不明白椭圆形的目的,因为它几乎马上就消失了。至少它现在可以明显工作=)。也许最明智的做法是扩展或包装tkinter的椭圆,但选择它需要一个水晶球。@luk32是的,
oval
似乎完全是为了设置默认值而存在的(它们甚至不是默认参数),所以有点毫无意义。我会说得更清楚的。谢谢,现在可以了。现在我确实意识到这是一个相当愚蠢的错误,因为函数创建的椭圆没有与任何变量相关联,因此,一旦创建了这个对象,它基本上就消失了。如果我想控制类OVAL的行为或实例,我应该始终拥有一个“pair”对象吗?我的意思是像“o”和“self.d”。还是有办法避免呢?对不起,我不熟悉这种面向对象的逻辑。没有真正需要
o
Oval
类。
self.d = Oval()
self.can1.create_oval(self.d.x1, self.d.y1, self.d.x2, self.d.y2, fill='red', width = 2)
o = Oval()
self.d = self.can1.create_oval(o.x1, o.y1, o.x2, o.y2, fill='red', width = 2)