Получить имя класса метода внутри декоратора в __init__ в python - PullRequest
4 голосов
/ 15 февраля 2012

Я пытаюсь каким-то образом «зарегистрировать» метод внутри класса (@classmethod) с помощью декоратора, чтобы можно было с легкостью вызывать его позже.

До сих пор я пытался в своемдекоратор для получения всего «пространства имен» без результатов.

Я могу получить только __module__, но не могу получить имя класса, в котором находится этот метод (потому что я регистрирую его во время__init__, а не во время __call__ внутри моего пользовательского декоратора).

Есть ли способ добиться этого?

Я думаю, что единственный способ - inspect весь файл и каким-либо образом проверить, существует ли метод внутри каждого из классов, поэтому inspect решения также принимаются

Больше информации

По сути, я пытаюсь форкнуть django-dajaxice и изменить этот декоратор, чтобы иметь возможность регистрировать функции полного пути (comprensive с classname) для вызова, например, my.namespace.views.MyView.as_view(...) из AJAX(Я знаю, что это сложнее, я пытаюсь упростить)

1 Ответ

1 голос
/ 15 февраля 2012

Вы можете использовать декоратор класса для регистрации своих методов:

def register_methods(cls):
    for name, method in cls.__dict__.items():
        # register the methods you are interested in

@register_methods
class Foo(object):
    def x(self):
        pass

Вы можете комбинировать это с декоратором методов, чтобы комментировать интересующие вас методы, чтобы вы могли легко их идентифицировать.

Кроме того, вы упомянули @classmethod, который является встроенным декоратором, который возвращает функцию, которая принимает класс в качестве первого аргумента. В этом случае вы, вероятно, не хотите использовать (или эмулировать) его.

...