在编写代码时,我遇到了表达~<type>
类型的linter(其中<type>
是一种类型,而不是<type>
文学类型)。self
就是一个例子。
class A:
def foo(self):
reveal_type(self) # reveals "~A"
我认为这意味着"A
或A
的子类;但是,我在网上找不到关于它的任何信息。
同样,你不能在代码中使用这种语法:
a: ~A # raises an exception: TypeError: bad operand type for unary ~: 'type'
如果a
透露这将是Unknown
。
查看源代码,TypeVars被打印(repr),并以"+"如果它们是协变的,如果逆变,"~";如果不变(既不是协变也不是逆变)
我在Mypy文档中找不到它,但Pyright似乎类似,它的文档说:
在函数中,self的类型被打印出来,并在类名前面加一个波浪号。这表明类型是绑定到类的TypeVar,而不是类本身。
所以我认为我对~Classname
的使用是一样的。