我想知道是否有人有任何好的方法可以快速解释如何使用可选参数有效地和热地创建用户定义的对象。 例如,我想创建这个对象:
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
有更好的方法吗?
编辑:我更改了代码,使其更广泛,更容易理解。
答案 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
如果您没有使用j
和k
明确调用该类,它将使用在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的允许更少/更多的可读代码。它只是将传递的字典键值对作为参数传递。