Аннотация типа Mypy для связанного метода?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Аннотация типа Mypy для связанного метода?

Сообщение Anonymous »

Я пишу несколько тестов для библиотеки, используя pytest . Я хочу попробовать ряд тестовых случаев для каждой функции, выявленной библиотекой, поэтому мне было удобно группировать тесты для каждого метода в классе. Все функции, которые я хочу проверить, имеют одинаковую подпись и возвращаем аналогичные результаты, поэтому я хотел бы использовать вспомогательный метод, определенный в суперклассе, чтобы сделать некоторые утверждения о результатах. Упрощенная версия будет работать так: < /p>

Код: Выделить всё

class MyTestCase:
function_under_test: Optional[Callable[[str], Any]] = None

def assert_something(self, input_str: str, expected_result: Any) -> None:
if self.function_under_test is None:
raise AssertionError(
"To use this helper method, you must set the function_under_test"
"class variable within your test class to the function to be called.")

result = self.function_under_test.__func__(input_str)
assert result == expected_result
# various other assertions on result...

class FunctionATest(MyTestCase):
function_under_test = mymodule.myfunction

def test_whatever(self):
self.assert_something("foo bar baz")
in assert_something необходимо вызвать __func __ () на функцию, поскольку назначение функции атрибуту класса делает его связанным методом этого класса - в противном случае Self будет передаваться в качестве первого аргумента функции внешней библиотеки, где это не имеет смысла. Однако это дает ошибку Mypy: < /p>

Код: Выделить всё

"Callable[[str], Any]" has no attribute "__func__"
< /code>

На основе моей аннотации правильно, что это не безопасная операция: произвольный вызов может не иметь атрибута __func __ < /code>. Тем не менее, я не могу найти аннотацию типа, которая бы указывала на то, что переменная function_under_test 
относится к методу и, следовательно, всегда будет иметь __func __ . Я упускаю из виду один, или есть другой способ настроить мои аннотации или доступ, чтобы работать с проверкой типов? Меня больше интересует, есть ли аннотация или другой трюк Mypy, которая заставит этот код работать.

Подробнее здесь: https://stackoverflow.com/questions/580 ... und-method
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Аннотация типа Mypy для связанного метода?
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Аннотация типа Mypy для связанного метода?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Что такое аннотация типа для «любого вызываемого объекта, кроме класса» в Python с использованием Mypy?
    Гость » » в форуме Python
    0 Ответы
    55 Просмотры
    Последнее сообщение Гость
  • Аннотация типа Python специальных форм с Pydantic и Mypy
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Аннотация типа Python специальных форм с Pydantic и Mypy
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»