1

我经常遇到这样的情况,我使用 exec 进行分配,如下所示:

 ...
 exec(
     "someClassInstance = someMapper({someInfo})".format(someInfo=someInfo),
     globals(),
 )

someClassInfo的实例在哪里SomeClass。然后我使用someClassInstance,像这样:

...
someVar = someClassInstance.someMethod()  # type: ignore

所有这些都很好,我完成了我想要的。

但是,从阅读的角度和 IDE(在我的例子中是 emacs+pyright)的角度来看, someClassInstance 的(非运行时)类型是未知的。

所以,我添加了“# type:ignore”。

但是,相反,我想以某种方式使用 python 3 的类型提示来让它知道 someClassInstance 是 SomeClass 类型(或其祖先之一)。

那可能吗?

4

1 回答 1

0

如果你输入

cast(type, value1)

那么结果将与 完全相同value,但您已经告诉类型检查器它的类型是指示的类型,并且它只需要相信您。

从文档中:

typing.cast(typ, val)

将值转换为类型。

这将返回不变的值。对于类型检查器,这表明返回值具有指定的类型,但在运行时我们故意不检查任何内容(我们希望它尽可能快)。

于 2021-10-11T20:17:39.253 回答