跳转到主要内容

一个装饰器,使函数在Python 2和3中仅接受关键字参数。

项目描述

https://img.shields.io/travis/adamchainz/kwargs-only/master.svg https://img.shields.io/pypi/v/kwargs-only.svg https://img.shields.io/badge/code%20style-black-000000.svg

未维护: 我不再维护这个包,因为它是为了Python 2兼容性,并且我使用过它的所有其他项目现在都是Python 3专属。如果您想继续维护,请与我联系。


一个装饰器,使函数在Python 2和3中仅接受关键字参数。

如果您只使用Python 3,您不需要这个,您可以只做

def myfunction(*, foo=1, bar=2):
    pass

为什么?

如果您正在制作一个库(仍然支持Python 2),您可能希望使其API中的所有函数都只接受关键字参数,出于以下几个原因

  • 为了避免用户混淆,例如,如果您将 xy 参数作为坐标,很容易忘记它们应该以什么顺序传递。

  • 为了使您的API更容易扩展 - 您将知道没有调用者依赖于位置参数的顺序,因此可以重构以使其有意义。

安装

使用 pip

pip install kwargs-only

支持Python 2.7和3.4到3.8。

用法

导入装饰器并将其应用于函数

from kwargs_only import kwargs_only

@kwargs_only
def myfunction(foo=1, bar=2):
    pass

然后使用位置参数调用函数将导致它因 TypeError 而失败

>>> myfunction(1, 2)
...
TypeError: myfunction should only be called with keyword args

装饰器通过允许第一个参数为位置参数,如果它的名字是 selfcls,来检测方法和类方法。应该在 classmethod 之前将 kwargs_only 应用到函数上。例如:

class MyClass:

    @classmethod
    @kwargs_only
    def my_class_method(cls, foo=1):
        pass

    @kwargs_only
    def my_instance_method(self, bar=1):
        pass

这就是全部内容!祝您享受!

历史

1.1.1 (2019-12-21)

  • 更新 PyPI 开发状态为不活跃。由于我将它复制到我的兼容 Python 2 的项目中,该包不再维护。我建议您也这样做,并放弃使用 Python 2!

1.1.0 (2019-11-15)

  • 支持 Python 3.8。

1.0.2 (2019-10-28)

  • 更新 PyPI 开发状态为活跃。由于我开始在兼容 Python 2 的项目中使用它,因此该包再次得到维护 :)

1.0.1 (2019-02-07)

  • 更新 PyPI 开发状态为不活跃。该包不再维护,请参阅 README.rst。

1.0.0 (2017-06-18)

  • 在 PyPI 上首次发布,包含 kwargs_only 装饰器。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

kwargs-only-1.1.1.tar.gz (4.4 kB 查看哈希值)

上传时间: 源代码

构建分发

kwargs-only-1.1.1-py2.py3-none-any.whl (3.9 kB 查看哈希值)

上传时间: Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面