2017-06-02 98 views
5

我正在尝试使用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可以包含来自几个数的类型 - floatboolstr参数。

现在,我试图写一个函数类型标注,看起来像这样:

def __init__(self, *args, **kwargs: Union[bool, str, float]) -> None: 

但我PyCharm IDE提醒我:

除了类型“积分”,得到了'STR',而不是

和:

在bool中找不到'get' str |浮动'

我做错了什么?

如何为kwargs编写类型注释,如果它包含来自多个类型的参数?

回答

2

请参阅this bugthis bug关于PyCharm的问题跟踪器。这显然是PyCharm检查器的一个问题; mypy(Python的另一种类型检查器)当我执行类似的代码时,不会投诉

已经有一个解决方案,它显然可用in build 171.2014.23。在此之前,假设Any作为暂时的解决方法,以使检查器停止抱怨。