Python Kivy,需要帮助来理解一种奇怪的技术。 self._object.clear() 等

Python Kivy, need help to understanding a strange technique. self._object.clear() etc

我对提出无法正确命名的问题感到内疚,因为我无法命名代码中使用的模式。

github 上有一个代码,我试图理解但未能理解。 https://github.com/kivy-garden/speedmeter/blob/master/kivy_garden/speedmeter/init.py

我不明白的模式在第128129行和第181、182行和许多其他地方。

大图是。 有一个class

class MyClassName(Widget):

有方法,例如

    def _draw_this_and_that(self):
       self._someName.clear()
       add = self._someName.add
       add(Color(rgba=get_color_from_hex(color)))

这个“_someName”在整个代码中只在我的代码示例的那两个地方找到。

我明白

   add = self._someName.add

创建函数“add”,但为什么需要它?为什么不打电话

   self._someName.add

代替?

我猜是

   self._someName.clear()

是否会删除添加到“_someName”的所有内容,对吗?

完全看不懂

  add(Color(rgba=get_color_from_hex(color)))

行得通(但行得通),然后绘制的任何内容都将使用该颜色。

我猜对了,如果我需要改变颜色(如果满足某些条件)那么我可以添加不同的颜色吗?

  add(Color(rgba=get_color_from_hex(different_color)))

并且不要强调添加会导致内存泄漏,因为

   self._someName.clear()

会处理吗?

我从来没有见过这样的模式。如果有人能解释它是如何工作的以及为什么,我会很高兴。 提前致谢!

_somenameIG 是在 __init__() 方法中创建的 canvas 个指令组:

    add = self.canvas.add
    for instructionGroupName in _ig:
        ig = InstructionGroup()
        setattr(self, '_%sIG' % instructionGroupName, ig)
        add(ig)

因此,self._someName.clear() 正在清除一个 canvas 指令组,add() 方法向该组添加指令。

除此之外我想解决以下问题:

Pattern I don't understand is in lines 128,129 and...

根据其 documentation the attr. sectors in line 130 是交替值和颜色的列表,其副本由 l 在本地存储,然后 color 值是(是)传给了InstructionGroup。由于它被用作重绘机制,因此在再次绘制之前通过方法 clear 从 canvas 中删除指令组。

creates function "add" but why that is needed? why not calling...

这样做主要是为了防止 re-evaluation 进程。