def __init__(
        self,
        surface,
        command=empty_function,
        coordinates_name="topleft",
        coordinates_value=(0, 0),
        **kwargs,
    ):
        """
        surface (pygame.Surface instance)
            surface representing button.
        command (callable)
            command to execute when clicking the button.
        coordinates_name (string)
            represents attribute name of rect wherein to
            store the position information from the
            coordinates value parameter.
        coordinates_value (sequence with two integers)
            position info, usually in the form of a tuple
            or list. The 2 integers represent coordinates
            in the x and y axes, respectively, for a
            position in 2d space.
        """
        ### store command
        self.command = command

        ### instantiate image and rect attributes

        self.image = surface
        self.rect = self.image.get_rect()

        ### position rect
        setattr(self.rect, coordinates_name, coordinates_value)

        ### store kwargs as attributes
        self.__dict__.update(kwargs)

        surface (pygame.Surface instance)
            surface representing button.
        command (callable)
            command to execute when clicking the button.
        coordinates_name (string)
            represents attribute name of rect wherein to
            store the position information from the
            coordinates value parameter.
        coordinates_value (sequence with two integers)
            position info, usually in the form of a tuple
            or list. The 2 integers represent coordinates
            in the x and y axes, respectively, for a
            position in 2d space.
        
nodezator/our3rdlibs/button.py