Search code examples
pythondesign-patternskivy

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


I feel guilty for asking question I can not properly name because I can not name the pattern used in the code.

There is a code on github I'm trying to understand and failing to do so. https://github.com/kivy-garden/speedmeter/blob/master/kivy_garden/speedmeter/init.py

Pattern I don't understand is in lines 128,129 and 181, 182 and many other places.

Big picture is. There a class

class MyClassName(Widget):

there are methods e.g.

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

This "_someName" found in whole code only in those 2 places as my code sample.

I understand that

   add = self._someName.add

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

   self._someName.add

instead?

I guess that

   self._someName.clear()

does erase whatever was added to "_someName", right?

I completely do not understand how

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

does it job (but it does) and then whatever is drawn will be with that color.

Do I guess it right that if I need to change color (if some condition met) then I could just add different color?

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

and don't stress that adding will cause memory leak because

   self._someName.clear()

will take care of it?

I never seen such pattern. I'd be very happy if someone could explain how it works and why. Thank you in advance!


Solution

  • The _somenameIG are canvas instruction groups that are created in the __init__() method:

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

    So, the self._someName.clear() is clearing a canvas instruction group, and the add() method adds instructions to the group.