Python - Проверить, относится ли аннотация подписи к классу c - PullRequest
0 голосов
/ 25 мая 2020

При использовании

for sig in inspect.signature.parameters.items():
    if isinstance(sig[1].annotation, inspect._empty):
        print("empty")

я никогда не могу заставить консоль сказать print "empty". Хотя при использовании

print(sig[1].annotation)

перед предложением if я получаю результат: <class 'inspect._empty'>. Я также пробовал использовать сравнение строк следующим образом:

if sig[1].annotation == "<class 'inspect._empty'>":
    print("empty")

Где здесь проблема?

1 Ответ

2 голосов
/ 25 мая 2020

Не используйте isinstance, просто отметьте is inspect._empty, например:

for sig in inspect.signature.parameters.items():
    if sig[1].annotation is inspect._empty:
        print("empty")

или предпочтительно используйте задокументированные Signature.empty или Parameter.empty. Все они одинаковы, но старайтесь избегать защищенных атрибутов, то есть тех, которые начинаются с _.

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