Использовать Python string repr для проверки типа объекта в декораторе? - PullRequest
1 голос
/ 22 апреля 2020

Я написал декоратор журналирования, который регистрирует время, которое требуется для выполнения определенной функции c, наряду с некоторой другой информацией. Я хотел бы добавить к этой указанной c информации некоторые вещи, основанные на входных аргументах. Итак, я написал этот небольшой фрагмент кода:

for var in args:
    if repr(type(var)) == '<class \'django.contrib.auth.models.User\'>':
        user_id = var.id
    elif repr(type(var)) == '<class \'someclass.models.Widget\'>':
        event_name = method.__name__ + ':' + var.key

Это кажется неуклюжим, но другой вариант заключается в наследовании django .contrib.auth.models.user и someclass.models.Widget в файл. У меня вопрос: правильно ли я это сделал, правильный подход наследования или я что-то пропустил?

1 Ответ

0 голосов
/ 22 апреля 2020

Это тупой способ сделать это. Умный способ:

for var in args:
    if type(var) == models.User:
        user_id = var.id
    elif type(var) == models.Widget:
        event_name = method.__name__ + ':' + var.key

И наследовать соответствующие источники для моделей.

Если вы хотите, чтобы ваш декоратор был более эффективным и в конечном итоге унаследовал тонну классов, он бы вместо этого имеет смысл иметь основной абстрактный класс и несколько подклассов.

...