python类的初始化程序中的可选参数
我想知道是否有人有任何快速解释如何有效地和pythonically用可选参数创建用户定义的对象的好方法。 举例来说,我想创建该对象:python类的初始化程序中的可选参数
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
有没有更好的方式来做到这一点?
编辑:我改变了代码,使它更广泛,更容易理解。
您可以设置默认参数:
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
如果不显式调用类j
和k
,它会使用这些默认值。
创建对象时,可以使用全部四个参数:OpticalTransition('sodium', 5, 100, 27)
。如果要使用j
的默认值,但不使用k
,则仍可以通过引用参数名称OpticalTransition('sodium', 5, k=27)
来完成此操作。
*一般来说,不要担心,如果x == None,只是如果x。*是不好的建议。许多值可以计算为“False” - 如果你想检查'None',则执行'如果x是None:',而不是'if x:'。在这个例子中,如果'j'为'0',它会做出意想不到的事情。 -1,直到这是固定的。 – 2013-03-20 22:14:48
你说得对 - 我想OP是这么做的,看看它是否存在,不一定要看它们是否具有“无”的价值。 – toxotes 2013-03-20 22:18:20
解决这个问题,我会将其翻转+1,这是除此之外可能的最佳答案。 (编辑:我自己编辑)。 – 2013-03-20 22:18:57
你可以传递args作为一个字典对象,并通过字典来解析,以得到你想要的。如果它没有通过,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
这大大地重塑了车轮 - 存在默认参数。 -1。这只会让你的代码变得不可读。 – 2013-03-20 22:16:55
这是无效的,你不能有多个'*'参数。以'*'为前缀的参数成为所有非关键字参数的*列表* *。 – 2013-03-20 22:12:48
感谢@Lattyware,这有助于。我看到* args和* keywordsargs等,并认为它们可能指的是通过了不同的参数。 – chase 2013-03-20 22:17:20
毒素的答案是你想要的,它只是有一个主要缺陷(见我对它的评论)。 – 2013-03-20 22:17:52