Python Mypy:使用高级(个人)类型

Python Mypy:使用高级(个人)类型,python,annotations,mypy,typehints,Python,Annotations,Mypy,Typehints,我最近发现了mypy,我希望我的代码能够用它进行类型检查 我有一个Something基类: class Something(): ... something... 我有几个子类,它们都是某物的实例,但类型不同: class Thing(Something) def __init__(): short_name = "S" class OtherThing(Something) def __init__(): short_name =

我最近发现了mypy,我希望我的代码能够用它进行类型检查

我有一个
Something
基类:

class Something():
    ... something...
我有几个子类,它们都是
某物的实例,但类型不同:

class Thing(Something)
    def __init__():
        short_name = "S"


class OtherThing(Something)
    def __init__():
        short_name = "T"
当我使用这些对象时,我通常会将它们放在列表中:

s1 = Thing()
s2 = OtherThing()
list_things: List[Something] = list()
list_things.append(s1)
list_things.append(s2)
但很明显我不能这么做,mypy不承认这个东西和其他东西是“低级类型”的东西

我应该如何更正它?

检查

从那里可以看到,它是按设计的

作为解决方法,引用以下内容:

您可以经常使用
Sequence[x]
而不是
List[x]
来获得与示例类似的代码。这是因为
Sequence
是协变的,不允许您在列表中设置项目,而
list[x]
是不变的,允许列表发生变异


该注释还说:“如果您的函数实际上没有修改列表,您可以通过将参数键入Sequence[Base]或Iterable[Base]来避免此错误。”。我的的确修改了列表。我明白了。也许可以避免修改列表。我不是mypy的下属,但正如我所见,您没有任何其他选择。mypy实际上会毫无问题地对您提供的代码进行打字检查。你应该编辑你的文章,并确保你的例子确实说明了你遇到的问题。