这个节目:
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
评论之外的其他内容)?
我不打算在这里使用
作为类型(在Array
意义上),只是为了用可爱的语法将数组类型传递到其他地方。typing
__class_getitem__
仅用于打字。请参阅文档:
上课方法
object.__class_getitem__(cls, key)
返回一个对象,该对象表示通过在 key 中找到的类型参数对泛型类进行专门化。
所以不幸的是,看起来你想要的东西是不可能的。只需使用常规构造函数语法即可。
以防万一您不知道,特殊方法不应该以意想不到的方式使用:
在任何上下文中,任何
名称的使用,如果不遵循明确记录的使用,都可能会在没有警告的情况下被破坏。__*__