我想输入提示以下功能:
def get_obj_class(self) -> CLASS_TYPE:
return self.o.__class__
CLASS_TYPE
应该表示class
es。self.o
可以是运行时确定的任何类型。
同样,如果我有一个函数 f(cls: CLASS_TYPE)
返回一个实例 cls
,有没有办法适当地键入提示返回值?
原文由 yspreen 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想输入提示以下功能:
def get_obj_class(self) -> CLASS_TYPE:
return self.o.__class__
CLASS_TYPE
应该表示 class
es。self.o
可以是运行时确定的任何类型。同样,如果我有一个函数 f(cls: CLASS_TYPE)
返回一个实例 cls
,有没有办法适当地键入提示返回值?
原文由 yspreen 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于 Python >=3.7,使用 type
(另见 PEP 585 ):
def get_obj_class(self) -> type:
return self.o.__class__
对于 Python <3.7,使用 typing.Type
:
def get_obj_class(self) -> typing.Type:
return self.o.__class__
原文由 VMRuiz 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
我建议使用
TypeVar
的组合,以表明您的self.o
值可以是任意类型,并且Type
,026- 方式如下:如果你想要
o
的类型更加动态,你可以显式或隐式地给它一个类型Any
。关于你的后一个问题,你会这样做:
请注意,在实例化您的类时需要小心——我不记得 Pycharm 在这里做了什么,但我知道 mypy 目前不会检查以确保您正在正确调用
__init__
函数/具有正确数量的参数。(这是因为 T 可以是任何东西,但是没有办法暗示构造函数应该是什么样子,所以执行这个检查最终要么不可能要么非常困难。)