python - **kwargs 中具有多种类型的类型注释

标签 python python-3.x type-hinting typing keyword-argument

我正在尝试将 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 可以包含多种类型的参数 - floatboolstr.

现在,我正在尝试为函数编写类型注释,如下所示:

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 bugthis bug在 PyCharm 的问题跟踪器上。这显然是 PyCharm 检查器的问题; mypy(另一种 Python 类型检查器)不会在我执行类似代码时提示

已经有针对此问题的修复程序,而且显然可用 in build 171.2014.23 .在那之前,我认为 Any 足以作为让检查员停止提示的临时解决方法。

关于python - **kwargs 中具有多种类型的类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44330538/

相关文章:

python - 如何仅使用 Python 对文本文件执行一些操作

python - 将 RowNumber 添加到 Dict 列表

python - 类型提示不在装饰器中求值

python - Mypy:使用更高的(个人)类型

php - 如何在 php 中键入提示生成器?

python - 使用带有动态参数的函数调用时的元组索引

python:函数*有时*维护对其模块的引用

使用Python3.4提取PDF文本

python - Django Rest Framework RetreiveAPIView get() 返回了 2 个结果

python - 随机生成9×9列表,其中条目是1到9之间的整数,在任何行或任何列中都没有重复条目