1. Андрей

    25.12.2009

    0 ↑
    0 ↓
    Как получить информацию о декораторах метода?
    class A:
    @test('qqq')
    @test1('qqq')
    def method1(self):
    pass
    Как узнать, что у метода method1 класса A есть декораторы и какие параметры в эти декораторы передаются?
  2. astur.net.ru

    25.12.2009

    0 ↑
    1 ↓

    Где узнать? В методе?... Так он же определяется вместе с декораторами...

  3. coffeesnake

    25.12.2009

    4 ↑
    0 ↓
    Питон - это не ява, а декораторы - не аннотации. Функциональность обеспечивает сама функция-декоратор, а не какой-то сторонний код, который потом использует декорированый объект.

    Если вы хотите как-то "пометить", то просто положите какой-то аттрибут в объект-функцию:
    class A:
    def method1(self):
    pass
    method1.test = 'qqq'
  4. Андрей

    25.12.2009

    0 ↑
    2 ↓
    Получать хотелось информацию не в этом методе а в другом классе, например.

    Хотелось что-то на подобии доступа к документации метода A.method1.__doc__, нету такого?
  5. astur.net.ru

    26.12.2009

    2 ↑
    0 ↓

    Хотелось что-то на подобии доступа к документации метода A.method1.__doc__

    class A:
        @test('qqq')
        @test1('qqq')
        def method1(self):
        """
        использованы декораторы test и test1
        """
            pass
    

    :)

  6. Unnamed

    26.12.2009

    0 ↑
    0 ↓
    Можно заглянуть в A.method1.func_name
    Например:
    #  если метод декорирован, получаем его декоратор
    if A.method1.func_name != 'method1':
    decor = A.__dict__[A.method1.func_name]
    И дальше можно и сам decor так проверить.
    А уж интроспекция поможет узнать всё детали.
    Если не всё, то многие.
  7. Иван Сагалаев

    26.12.2009

    3 ↑
    0 ↓

    Андрей, а зачем вы это делаете? Поскольку в Питоне этого никогда не нужно на практике, у меня стойкое ощущение, что для вашей задачи есть более идиоматическое для Питона решение. Опишите всю задачу, пожалуйста.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.