Получить собственный класс функции Python от декоратора - PullRequest
6 голосов
/ 07 октября 2011

У меня есть декоратор в PY.Это метод и принимает функцию в качестве параметра.Я хочу создать структуру каталогов на основе переданной функции.Я использую имя модуля для родительского каталога, но хотел бы использовать имя класса для подкаталога.Я не могу понять, как получить имя класса, которому принадлежит объект fn.

My Decorator:

def specialTest(fn):
    filename = fn.__name__
    directory = fn.__module__
    subdirectory = fn.__class__.__name__ #WHERE DO I GET THIS

Ответы [ 2 ]

8 голосов
/ 07 октября 2011

Если fn является instancemethod, то вы можете использовать fn.im_class.

>>> class Foo(object):
...     def bar(self):
...         pass
...
>>> Foo.bar.im_class
__main__.Foo

Обратите внимание, что это не будет работать от декоратора, поскольку функция преобразуется только в метод экземпляра после , когда класс определен (т. Е. Если @specialTest использовался для украсить bar, это не сработает; если это вообще возможно, сделать это в этот момент нужно будет путем проверки стека вызовов или чего-то такого же несчастного).

6 голосов
/ 07 октября 2011

В Python 2 вы можете использовать атрибут im_class для объекта метода.В Python 3 это будет __self__.__class__ (или type(method.__self__)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...