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

标签 python function default

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

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

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

为了使用这个类,我设想了 2 个场景:要么我知道向量在启动时的特征,然后用这些值启动它:

v = myVector(4,2)

或者我在启动时不知道这些,然后我很高兴它将获得默认值。

但是,通过上述实现,实现了第三种情况——仅使用 第一个参数:

v = myVector(4)

在这种情况下,只有第二个参数 (size) 会被赋予默认值,生成的对象将没有多大意义。

在我看来,在这种情况下,所需的行为是要么使用两个参数,要么不使用。如果是这种情况,实现这一点的一种方法是引发异常。

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 并执行相同的操作 - 即不过对我来说似乎不太明确,这意味着您不能将可选参数用于其他任何事情。

关于python函数使用多个默认值或根本没有默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17804286/

相关文章:

python - Django 多个数据库,但在单个数据库中进行身份验证

web - 网站中的默认命名空间

python - py.test : Temporary folder for the session scope

python - 求解三次多项式系统(找到贝塞尔曲线的交点)

python - SQLAlchemy:如何在不查询的情况下删除多行

c - "install"函数在 C 语法中意味着什么?

c - C 中指针的困难

C、如何使用pthread_create函数创建线程

r - 如何更改ggplot中的默认美感?

c# - 如果类型仅称为 System.Type,如何获取类型的默认值?