在 python 函数中需要命名参数
require named parameters in python function
我创建了一个 class,我想为用户(可能是我)提供两种不同的初始化方法。对于这个例子,class 被称为 Box
,我想用以下任一方法初始化它:
两组笛卡尔坐标,分别代表最小值和最大值(x,y)。
一组代表最小和框尺寸的笛卡尔坐标
我可以通过使用命名参数来完成此操作,但是如果没有调用命名参数,我想引发错误。在没有调用命名参数的情况下,我当前的代码在名为 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 不同方法的常规方法是使用 class 方法,例如:
class Box(object):
@classmethod
def from_coordinates(cls, coordinates):
...
@classmethod
def from_min_dimensions(cls, min_, dimensions):
...
我创建了一个 class,我想为用户(可能是我)提供两种不同的初始化方法。对于这个例子,class 被称为 Box
,我想用以下任一方法初始化它:
两组笛卡尔坐标,分别代表最小值和最大值(x,y)。
一组代表最小和框尺寸的笛卡尔坐标
我可以通过使用命名参数来完成此操作,但是如果没有调用命名参数,我想引发错误。在没有调用命名参数的情况下,我当前的代码在名为 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 不同方法的常规方法是使用 class 方法,例如:
class Box(object):
@classmethod
def from_coordinates(cls, coordinates):
...
@classmethod
def from_min_dimensions(cls, min_, dimensions):
...