@Azasemey

Ошибка — name 'self' is not defined. Как исправить?

class SelectEventMenu(miru.View):

    def __init__(self, events):
        super().__init__(timeout=60)
        self.events = events


    @miru.select(
        placeholder='Choose event',
        options=[miru.SelectOption(label=f'{event["title"]}') for event in self.events]
    )
    async def slm_events(self, select: miru.Select, ctx: miru.Context) -> None:
        pass


Всем привет. Почему я не могу передать self переменную в качестве аргумента декоратора?
  • Вопрос задан
  • 523 просмотра
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Потому что на уровне класса, где объявлен декоратор, такой переменной нет.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Декоратор отрабатывает при создании собственно класса. На этот момент никаких экземпляров ещё нет.
self имеет смысл только в контексте тела метода класса, но не "снаружи" методов.

Так что стоит задуматься, а что именно ты пытаешься сделать. Есть ли смысл в твоём классе-обёртке?

А если прямо очень надо, можно вспомнить, как работает декоратор, и что его можно вызывать вручную, например, в конструкторе класса.
@some_decorator_with_params(params)
def some_func(...):
    ...
# это всего лишь синтаксический сахар для
def some_func(...):
    ...

decorator = some_decorator_with_params(params)
some_func = decorator(some_func)  # вызываем декоратор вручную
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы