代码之家  ›  专栏  ›  技术社区  ›  JPFrancoia

mypy:使用更高(个人)类型

  •  0
  • JPFrancoia  · 技术社区  · 7 年前

    我最近发现了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不承认事物和其他事物是“低级类型”的东西。

    我该怎么纠正?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Adelin    7 年前

    支票 Github issue

    从那里可以看出, in the official docs ,它是按设计的

    作为权宜之计,引用 JukkaL's comment on github 以下内容:

    你可以经常使用 Sequence[x] 而不是 List[x] 让代码像你的例子一样工作。这样做是因为 Sequence 是协变的,不允许在列表中设置项,与 列表[X] 它是不变的,允许列表的变异。