我正在尝试将 Python 的 type annotations
与抽象类一起使用。
我的 __init__
函数如下所示:
from abc import ABCMeta
class SomeClass(object, metaclass=ABCMeta):
def __init__(self, *args, **kwargs):
print("Initiating %s object.", self.__class__.__name__)
self.username = kwargs['data']
assert isinstance(self.username, str)
is_premioum = kwargs.get('premioum', False)
self.money_investmant = kwargs.get('investmant')
if isinstance(self.money_investmant, str):
self.money_investmant = float(self.money_investmant)
如您所见,kwargs
可以包含多种类型的参数 - float
、bool
和 str
.
现在,我正在尝试为函数编写类型注释,如下所示:
def __init__(self, *args, **kwargs: Union[bool, str, float]) -> None:
但是我的 PyCharm
IDE 提醒我:
Except type 'Integral', got 'str' instead
和:
Cannot find referance 'get' in bool | str | float'
我做错了什么吗?
如果 kwargs 包含来自多个类型的参数,我应该如何编写类型注释?
最佳答案
参见 this bug和 this bug在 PyCharm 的问题跟踪器上。这显然是 PyCharm 检查器的问题; mypy
(另一种 Python 类型检查器)不会在我执行类似代码时提示。
已经有针对此问题的修复程序,而且显然可用 in build 171.2014.23 .在那之前,我认为 Any
足以作为让检查员停止提示的临时解决方法。
关于python - **kwargs 中具有多种类型的类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44330538/