MyPy выдает ложную тревогу по `mutagen.id3.PictureType`Python

Программы на Python
Anonymous
MyPy выдает ложную тревогу по `mutagen.id3.PictureType`

Сообщение Anonymous »

Я пишу код Python (для управления метаданными аудио), используя библиотеку мутагенов. В библиотеке нет подсказок типов, однако я добавил подсказки типов в свои подпрограммы. В частности, у меня есть функция со следующей сигнатурой:

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

from mutagen import id3

def fun(arg1: str, arg2: id3.PictureType = id3.PictureType.ARTIST):
# the body of the function
Но MyPy жалуется на назначение аргументов по умолчанию:

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

error: Incompatible default for argument "arg2" (default has type "int", argument has type "PictureType")
Я в замешательстве и не могу понять, почему это происходит. Я это проверил:

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

>>> isinstance(id3.PictureType.ARTIST, id3.PictureType)
True
>>> isinstance(id3.PictureType.ARTIST, int)
True
>>> issubclass(id3.PictureType.ARTIST.__class__, int)
True
>>> inspect.getmro(id3.PictureType.ARTIST.__class__)
(mutagen.id3._specs.PictureType, int, object)
Итак, похоже, иерархия типов правильная (

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

id3.PictureType.ARTIST
должен быть экземпляром id3.PictureType, который сам по себе является подклассом int). Тем не менее, MyPy предполагает, что id3.PictureType.ARTIST имеет тип int, почему?
Может ли это быть связано с «особым» способом реализации id3 автором мутагена .PictureType как перечисление (см. здесь и здесь)? И если да, то есть ли способ это исправить (без повторной реализации PictureType как правильного перечисления Python)?

Подробнее здесь: https://stackoverflow.com/questions/777 ... icturetype

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