在kwargs中键入多种类型的注释
问题描述:
我正在尝试使用Python的type annotations
和抽象类。 我__init__
功能如下:在kwargs中键入多种类型的注释
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提醒我:
除了类型“积分”,得到了'STR',而不是
和:
在bool中找不到'get' str |浮动'
我做错了什么?
如何为kwargs编写类型注释,如果它包含来自多个类型的参数?
答
请参阅this bug和this bug关于PyCharm的问题跟踪器。这显然是PyCharm检查器的一个问题; mypy
(Python的另一种类型检查器)当我执行类似的代码时,不会投诉。
已经有一个解决方案,它显然可用in build 171.2014.23。在此之前,假设Any
将作为暂时的解决方法,以使检查器停止抱怨。