def Draw(self, *args, **kwargs):
        """
        Parameters
        ----------
        args : positional arguments
            Positional arguments are passed directly to ROOT's Draw
        kwargs : keyword arguments
            If keyword arguments are present, then a clone is drawn instead
            with DrawCopy, where the name, title, and style attributes are
            taken from ``kwargs``.

        Returns
        -------
        If ``kwargs`` is not empty and a clone is drawn, then the clone is
        returned, otherwise None is returned.
        """
        if kwargs:
            return self.DrawCopy(*args, **kwargs)

        pad = ROOT.gPad
        own_pad = False
        if not pad:
            # avoid circular import by delaying import until needed here
            from .canvas import Canvas
            pad = Canvas()
            own_pad = True
        if self.visible:
            if self.drawstyle:
                self.__class__.__bases__[-1].Draw(self,
                    " ".join((self.drawstyle, ) + args))
            else:
                self.__class__.__bases__[-1].Draw(self, " ".join(args))
            pad.Modified()
            pad.Update()
        if own_pad:
            keepalive(self, pad)
Parameters
        ----------
        args : positional arguments
            Positional arguments are passed directly to ROOT's Draw
        kwargs : keyword arguments
            If keyword arguments are present, then a clone is drawn instead
            with DrawCopy, where the name, title, and style attributes are
            taken from ``kwargs``.

        Returns
        -------
        If ``kwargs`` is not empty and a clone is drawn, then the clone is
        returned, otherwise None is returned.