Python decorator @func (). Ошибка синтаксиса атрибута

Я пытался найти ответ здесь, но не смог.

@obj.func # works
@obj.func(**kwargs)  #works
@obj.func1(**kwargs).func2   #-> syntax error 

Я не понимаю, почему третья форма является SyntaxError, мне кажется, что она не нарушает синтаксис Python, и мне ясно, что хочет делать пользователь (см. Пример ниже).

я смотрел набодрость 0318 реализации декоратора, но не нашел ответов.

Ниже приведен пример использования:

class ItemFunc(object):
    def __init__(self, fcall=None, **kwargs):
        self.defaults = kwargs
        self.fcall = None

    def __call__(self, *args, **kwargs):
        kwargs = dict(self.defaults, **kwargs)
        # do something more complex with kwargs 
        output = self.fcall(*args, **kwargs)
        # do something more with output  
        return output

    def caller(self, fcall):
        """ set call and return self """
        self.call = fcall # after some check obviously
        return self

    def copy(self,**kwargs):
        kwargs = dict(self.defaults, **kwargs)
        return self.__class__(self.fcall, **kwargs)

    def copy_and_decorate(self, **kwargs):
        return self.copy(**kwargs).caller 

Чем вы можете использовать ItemFunc в качестве декоратора:

@ItemFunc
def plot(**kwargs):
    pass

redcross = plot.copy(color="red", marker="+")
@redcross.caller
def plot_data1(**kwargs):
    pass

bluecross = redcross.copy(color="blue")
@bluecross.caller
def plot_data2(**kwargs):
    pass

Но почему этот следующий «сокращенный синтаксис» запрещен:

@redcross.copy(color="blue").caller
def plot_data2(**kwargs):
    pass

Но я могу сделать:

@redcross.copy_and_decorate(color="blue")
def plot_data2(**kwargs):
    pass         

Первая форма выглядит лучше, по крайней мере, я лучше понимаю намерения.

Ответы на вопрос(1)

Ваш ответ на вопрос