python函数使用多个默认值或根本没有默认值

我正在定义一个代表向量的类:

'''
An entity with size and direction
'''
UNINITIALIZED = -1

class myVector():    
    def __init__(self,direction = UNINITIALIZED,size = UNINITIALIZED):
        self.direction = direction
        self.size = size

对于使用该类,我想象两个场景:要么我知道向量在启动时的charecharistics,然后使用这些值启动它:

v = myVector(4,2)

或者我在启发时不知道这些,然后我很高兴它会得到默认值.

然而,通过上述实现,实现了第三种情况 – 仅使用启动向量
第一个论点:

v = myVector(4)

在这种情况下,只会为第二个参数(大小)分配默认值,并且生成的对象没有多大意义.

在我看来,在这种情况下,所需的行为是使用两个参数或没有.实现这一点的一种方法是在这种情况下引发异常.

def __init__(self,direction = UNINITIALIZED,size = UNINITIALIZED):
    if (direction != UNINITIALIZED) and (size == UNINITIALIZED):
        raise Exception('Use both parameters or none') 
    self.direction = direction
    self.size = size

您认为优雅地执行此操作的pythonic方式是什么?

最佳答案
大小和方向对我来说就像一个元组:

class myVector():    
    def __init__(self, sd=(UNINITIALIZED, UNINITIALIZED)):
       try:
           self.size, self.direction = sd
       except (ValueError, TypeError) as e:
           raise ValueError('two values of size and direction must be specified')

然后,如果不需要默认值,则使用大小和方向的元组调用它.

如果您不想将语义更改为要求传递元组,那么如果您不使用其他参数,则可以将sd更改为* args并执行相同的操作 – 这对我来说似乎不那么明确,这意味着您可以其他任何东西都使用可选的args.

转载注明原文:python函数使用多个默认值或根本没有默认值 - 代码日志