python - 在python函数中需要命名参数

标签 python named-parameters

我创建了一个类,我想为用户(可能是我)提供两种不同的初始化方法。对于这个例子,这个类被称为 Box ,我想用以下任一方式初始化它:

  1. 两组笛卡尔坐标,分别表示最小值和最大值 (x,y)。

  2. 一组表示最小和框尺寸的笛卡尔坐标

我可以通过使用命名参数来做到这一点,但是如果没有调用命名参数,我想引发错误。在没有调用命名参数的情况下,我当前的代码在名为 pass_var 的情况下放置了一个虚拟参数。它有效,但我认为必须有更优雅或 Pythonic 的解决方案。

class Box(object):

    def __init__(self, pass_var=None, coordinates=None, min_points=None, dimensions=None):
        if coordinates:
            setup_box_from_coordinates()
            return
        elif min_points and dimensions:
            setup_box_from_dimensions()
            return
        raise NameError("Box Class needs to be initiated with 'coordinates='' or 'min_pts= & dimensions='"

最佳答案

如果您使用的是 Python 3.x,您可以使用 * 来防止不需要的位置 参数:

class Box(object):

    def __init__(self, *, coordinates=None, min_points=None, dimensions=None):
        ...

在 2.x 中,您不会自动收到错误,但可以执行以下操作:

class Box(object):

    def __init__(self, *args, coordinates=None, min_points=None, dimensions=None):
        if args:
            raise TypeError('positional arguments not supported')
        ...

但是,提供创建类的不同方法的传统方式是使用类方法,例如:

class Box(object):

    @classmethod
    def from_coordinates(cls, coordinates):
        ...

    @classmethod
    def from_min_dimensions(cls, min_, dimensions):
        ...

关于python - 在python函数中需要命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35521778/

相关文章:

python - 在 Flask-SQLAlchemy 模型类中使用数据类装饰器?

typescript :通过传入命名参数的构造函数创建类?

java - 在 Java 中语义地使用变量名

python - 使用 BeautifulSoup 从页面中抓取所有结果

python - Scrapy 抓取第一页但不跟踪链接

python - MatPlotLib - 子图的子图或单个图上的多个断轴图

构造函数中的 JavaScript 自定义参数

ruby - 如何将命名参数传递给 Rake 任务?

php - 在 PHP 中这样命名参数是个坏主意吗?

Python twincat ADS 更改 bool 变量值