python类初始化程序中的可选参数

时间:2013-03-20 22:03:21

标签: python oop object

我想知道是否有人有任何好的方法可以快速解释如何使用可选参数有效地和热地创建用户定义的对象。 例如,我想创建这个对象:

class Object:
    def __init__(self, some_other_object, i, *j, *k):
        self.some_other_object = some_other_object
        self.i = i
        # If j is specified, assume it is = i
        if(j==None):
            self.j = i
        else:
            self.j = j
        # If k is given, assume 0
        if(k==None):
            self.k = 0
        else:
            self.k = k

有更好的方法吗?

编辑:我更改了代码,使其更广泛,更容易理解。

3 个答案:

答案 0 :(得分:6)

您可以设置默认参数:

class OpticalTransition(object):
    def __init__(self, chemical, i, j=None, k=0):
        self.chemical = chemical
        self.i = i
        self.k = k
        self.j = j if j is not None else i

如果您没有使用jk明确调用该类,它将使用在if语句末尾确定的默认值

创建对象时,可以正常使用所有四个参数:OpticalTransition('sodium', 5, 100, 27)

如果您要使用j的默认值,而不是k的默认值,您仍然可以通过引用参数的名称来执行此操作:OpticalTransition('sodium', 5, k=27)

答案 1 :(得分:0)

你可以将args作为dict对象传入,并通过dict解析得到你想要的任何东西。如果它没有被传递,get函数将返回None,你可以检查这样的存在。

class Optioncal_transition(object):
  def __init(self, **args):
    self.chemical = args.get('chemical')
    self.i = args.get('i')
    self.j = args.get('j')
    if self.j is None:
      self.j = self.i 

答案 2 :(得分:-1)

我太新了,无法进行stackoverflow投票或评论,但我赞成ronak的回答。 Gareth Latty对默认参数的评论通过使用get方法的[default]选项解决。

dictionary.get(key[, default])
当传递许多可选变量时,使用** args的

允许更少/更多的可读代码。它只是将传递的字典键值对作为参数传递。