python如何docstring kwargs及其预期类型

2024-06-26 10:41:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在docstring中表达预期类型的关键字参数的传统方法是什么?在

或者这是出于原则我根本不应该做的事?在这个问题上,谷歌的态度令人怀疑。在

(我对这样做很感兴趣,因为我发现在编写代码时,跟踪所有变量的预期类型非常有用。我使用PyCharm,当参数具有意外类型,或者自定义类属性可能无法解析时,它会警告我。)

但是,我发现有时可能的keywrord参数列表

def foo(bar, parameter_1: int=1, paramter_2: str='', ...etc )

会变得很长而且不可读。。在

考虑以下代码

^{pr2}$

我想使用docstring来声明预期的类型。我想让PyCharm提醒我,莎莉的年龄是错误的。当然,我不知道PyCharm是否有能力“理解”docstring中的详细程度。不过,我想知道传统的做法是什么。在

其他关于kwargs和docstrings的评论和建议也很受欢迎。在


Tags: 方法代码警告类型列表参数属性def
1条回答
网友
1楼 · 发布于 2024-06-26 10:41:01

Pycharm无法警告您关键字的类型错误,但如果打开文档面板,则可以看到在docstring中指定的所需类型。如果不是,则快捷方式是ctr+q,函数名处有插入符号。一次用于弹出窗口,两次用于将文档面板固定在右侧。在

如果类型不正确,则可以交替引发错误。在

经过研究和大量测试,这是我发现的一切。 你需要什么就拿什么:

from typing import Dict, Any
from warnings import warn


class Person:
    """
    a person
    """
    _ssn: int
    _data: Dict[str, Any]

    def __init__(self, ssn: int, *args, **kwargs) -> None:
        """
        Create an instance of Person

        :param ssn: social security number
        :type ssn: int
        :key name: person's first name, should be a str
        :key age: person's age in years, rounded down, should be an int
        :return: __init__ should return None
        :rtype: None
        """
        self._ssn = ssn
        if 'name' in kwargs:
            if type(kwargs['name']) is str:
                self._data['name'] = kwargs['name']
            else:
                raise TypeError("__init__() kwargs['name']: got {} but expected \
                type is str".format(type(kwargs["name"]).__name__))
        else:
            warn('This person have a default name', Warning)
            self._data['name'] = 'Smith'

        if 'age' in kwargs:
            if type(kwargs['age']) is int:
                self._data['age'] = kwargs['age']
            else:
                raise TypeError("__init__() kwargs['age']: got {} but expected \
                type is str".format(type(kwargs["age"]).__name__))
        else:
            warn('This person have a default age', Warning)
            self._data['age'] = 21

您可以使用keyword,而不是key。在

这个例子提供了:

  • PyCharm用于生成文档的完全文档化docstring
  • 类型检查+引发类型错误
  • 默认值(额外提示:警告用户已设置默认值)

Person

我建议您添加@property.getter@property.setter来访问_id和{}。 而且类属性_data太过了,您应该用_name和{}替换它,因为您更喜欢默认值而不是没有值。Code here。在

^{pr2}$

我建议社会保险号码是ssn。在

来源:PyCharm 2018.3 Help

相关问题 更多 >