Ошибка в декораторах

Вот кусочек кода:

class Expr:
    pass

class BinOp(Expr):
    def __init__(self, op, left, right):
        self.op = op
        self.left = left
        self.right = right

class Number(Expr):
    def __init__(self, value):
        self.value = value

@_('expr PLUS expr',
   'expr MINUS expr',
   'expr TIMES expr',
   'expr DIVIDE expr')
def expr(self, p):
    return BinOp(p[1], p.expr0, p.expr1)

@_('LPAREN expr RPAREN')
def expr(self, p):
    return p.expr

@_('NUMBER')
def expr(self, p):
    return Number(p.NUMBER)

Это часть лексера.

И у меня выходит ошибка. Ругается на декоратор. Как пофиксить? вот ошибкавведите сюда описание изображения + подсвечивает декоратор


Ответы (1 шт):

Автор решения: CrazyElf

Как я вам уже написал в предыдущем вопросе, судя по документации, чтобы пользоваться этим декоратором, вы должны наследоваться от класса Lexer, и тогда в методах вашего класса вы можете пользоваться этим декоратором:

class Number(Lexer): # <-- наследуемся от Lexer
    def __init__(self, value):
        self.value = value

    @_('expr PLUS expr',
       'expr MINUS expr',
       'expr TIMES expr',
       'expr DIVIDE expr')
    def expr(self, p):
        return BinOp(p[1], p.expr0, p.expr1)
→ Ссылка