В Python, как я могу определить, в каком классе был объявлен метод? - PullRequest
2 голосов
/ 07 февраля 2011

Как я могу получить ссылку на класс, в котором объявлен метод?В приведенном ниже коде я пытаюсь получить ссылку на Classical в test.

class Classical:
    def method():
        pass

def test(func):
    # How can I get a reference to 'Classical' using only 'func'?
    pass

test(Classical.method)

Я пробовал dir() поиск и поиск безрезультатно.Есть идеи?(Если это важно, я использую Python 3.1)

РЕДАКТИРОВАТЬ: Изменен код, чтобы сделать его более понятным.

1 Ответ

2 голосов
/ 07 февраля 2011

Функция декоратора test() выполняется в контексте класса Classical во время создания этого класса.Выполняя код в теле класса, класс еще не существует, поэтому нет доступа к нему.Чтобы обойти это, вы должны использовать декоратор класса вместо декоратора функции.

В качестве альтернативы, вы можете сказать нам, чего вы на самом деле пытаетесь достичь.Скорее всего, будет простое решение.

Редактировать : Чтобы ответить на отредактированный вопрос: Чтобы получить доступ к классу, к которому принадлежит несвязанный метод, вы можете использовать unbound_method.im_class в CPython 2.Икс.Я не знаю, переносимо ли это на другие реализации Python, и, скорее всего, есть лучший способ достичь того, чего вы пытаетесь достичь.

...