Mypy: аргумент метода, несовместимый с супертипомPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Mypy: аргумент метода, несовместимый с супертипом

Сообщение Anonymous »

Посмотрите пример кода (mypy_test.py):

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

import typing

class Base:
def fun(self, a: str):
pass

SomeType = typing.NewType('SomeType', str)

class Derived(Base):
def fun(self, a: SomeType):
pass
теперь mypy жалуется:

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

mypy mypy_test.py
mypy_test.py:10: error: Argument 1 of "fun" incompatible with supertype "Base"
В таком случае, как я могу работать с иерархией классов и соблюдать типобезопасность?
Версии программного обеспечения:
mypy 0.650
Python 3.7.1
Что я пробовал:

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

import typing

class Base:
def fun(self, a: typing.Type[str]):
pass

SomeType = typing.NewType('SomeType', str)

class Derived(Base):
def fun(self, a: SomeType):
pass
Но это не помогло.
Один пользователь прокомментировал: «Похоже, вы не можете сузить допустимые типы в переопределенном методе?»
Но в этом случае, если я использую максимально широкий тип (

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

typing.Any
) в сигнатуре базового класса тоже не должно работать. Но это так:

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

import typing

class Base:
def fun(self, a: typing.Any):
pass

SomeType = typing.NewType('SomeType', str)

class Derived(Base):
def fun(self, a: SomeType):
pass
Mypy не жалуется на приведенный выше код.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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