Yuv*_*uss 7 python typing type-hinting kwargs python-3.x
我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,kwargs
可能包含从几个数字类型-的参数float
,bool
和str
.
现在,我正在尝试为函数编写类型注释,如下所示:
def __init__(self, *args, **kwargs: Union[bool, str, float]) -> None:
Run Code Online (Sandbox Code Playgroud)
但我的PyCharm
IDE提醒我:
除了'Integral'类型,取而代之的是'str'
和:
在bool中找不到referance'get' str | 浮动'
难道我做错了什么?
如果kwargs包含来自多个类型的参数,我应该如何编写kwargs的类型注释?
请参阅此错误以及PyCharm 问题跟踪器上的此错误。这显然是 PyCharm 检查器的问题;mypy
当我执行类似的代码时(Python 的另一个类型检查器)不会抱怨。
已经有一个修复程序,并且显然可以在 build 171.2014.23 中使用。在那之前,我认为作为一个临时解决方法Any
就足以让检查员停止抱怨。