类型 Type[Array] 不是泛型且不可索引

问题描述 投票:0回答:1

这个节目:

class Array:
    def __init__(self, underlying):
        self.underlying = underlying

    def __class_getitem__(cls, key):
        return Array(key)

    def __getitem__(self, key):
        pass

    def __str__(self):
        return f"Array({self.underlying=})"

def foo(name, kind):
    pass

foo(name="x", kind=Array["int"])

mypy
标记:

x.py:17: error: The type "Type[Array]" is not generic and not indexable  [misc]

__getitem__
是我添加的只是为了看看它是否能解决问题(它没有)。我不打算在这里使用
Array
作为类型(在
typing
意义上),只是为了用可爱的语法在其他地方传递数组类型。

这个

mypy
错误是什么意思以及如何修复它(最好使用
# ignore
评论之外的其他内容)?

python python-3.x mypy
1个回答
0
投票

我不打算在这里使用

Array
作为类型(在
typing
意义上),只是为了用可爱的语法将数组类型传递到其他地方。

__class_getitem__
仅用于打字。请参阅文档

上课方法

object.__class_getitem__(cls, key)

返回一个对象,该对象表示通过在 key 中找到的类型参数对泛型类进行专门化。

所以不幸的是,看起来你想要的东西是不可能的。只需使用常规构造函数语法即可。


以防万一您不知道,特殊方法不应该以意想不到的方式使用

在任何上下文中,任何

__*__
名称的使用,如果不遵循明确记录的使用,都可能会在没有警告的情况下被破坏。

© www.soinside.com 2019 - 2024. All rights reserved.