[英]Python: passing arguments to __init__
我是python新手,具有以下init :
def __init__(self, name, iMD=False, iI=False, o=0, o1=0, o2=0,
t=QUIC, mF=QUIC_KW, pM=0, pD=0, nF=0, pA=0, iS=0, iPA=1, h='',
iRC='', sC='', iM=0, iS=0, pAIR=0,
pAII=0, cM='', k=0.0, t=0.0, m=0.0, mi=0.0, av=0.0, mL=0.0,
mD=None, iD=None, cCI=None, cCSEI=None, rfI = 0)
基本上,当我创建此对象时,我想传入所有参数,默认值为None
的参数除外。
Python可以解决吗? 我也不想移动参数的顺序,因为有很多遗留代码。
编辑:只是为了澄清。 是的,有默认值,但是,我正在使用从数据库读取的非默认值创建此对象。 基本上,我需要为除mD,iD,cCI和cCSEI之外的所有参数传递参数。
我希望可以像这样构造一个新对象:object(arg1,arg2,arg3,arg4,arg5,arg6,arg7,...,arg27,,,,,arg28)
方法唯一需要的参数是name
,并且必须是第一个参数。 之后,所有参数都具有默认值,使其成为可选值。 如果要覆盖默认值,请仅在以下位置传递该值:
foo = SomeClass('hello', rfI=10)
另外,我是否建议使用有意义的名称或至少在您的方法中添加文档字符串 。 您可能还需要阅读Python样式指南 。
我相信您正在寻找字典解压缩:
class MyObj(object):
def __init__(self, name, iMD=False, iI=False, o=0, o1=0, o2=0,
t=QUIC, mF=QUIC_KW, pM=0, pD=0, nF=0, pA=0, iS=0, iPA=1, h='',
iRC='', sC='', iM=0, iS=0, pAIR=0,
pAII=0, cM='', k=0.0, t=0.0, m=0.0, mi=0.0, av=0.0, mL=0.0,
mD=None, iD=None, cCI=None, cCSEI=None, rfI = 0)
myArgs = {'rfI': 11}
m = MyObj('myname', **myArgs)
// m now has 'myname' as a name, rfI=11 and everything else as default
请注意,这与说完全相同:
m = MyObj('myname', rfI=11)
首先,您的代码有一个语法错误: Duplicate Argument iS in function defination
。 我用iS2
替换了一个iS
。 因此,现在构造函数期望最多33个参数来初始化该类。
如您所说,除了默认值为None
之外,您都不想将值传递给所有人。 只需将27个值传递给构造函数
class foo():
def __init__(self, name, iMD=False, iI=False, o=0, o1=0, o2=0,
t=QUIC, mF=QUIC_KW, pM=0, pD=0, nF=0, pA=0, iS=0, iPA=1, h='',
iRC='', sC='', iM=0, iS2=0, pAIR=0,
pAII=0, cM='', k=0.0, t2=0.0, m=0.0, mi=0.0, av=0.0, mL=0.0,
mD=None, iD=None, cCI=None, cCSEI=None, rfI = 0):
print name, iMD
myObj = foo(val1, val2, val3, val4, val5, val6, val7, val8, val9, val10,
val11, val12, val13, val14, val15, val16, val17, val18, val19, val20,
val21, val22, val23, val24, val25, val26, val27, val28)
前27个参数的值将被重载。
我将使用以下功能作为示例,因为您的代码未按此处发布的方式运行:
def func(name, arg1=0, arg2=0, arg3=0, arg4=0, argSkip=None, arg6=0):
print arg1, arg2, arg3, arg4, argSkip, arg6
参数值应从此列表传递:
argument_values = [
"value1", "value2", "value3", "value4", "value... SURPRISE! VALUE6"
]
您可以通过切片来获得没有最后一个参数的相同列表:
>>> argument_values[:-1]
['value1', 'value2', 'value3', 'value4']
您可以获取此切片列表,并使用*
其解压缩为参数 :
func('some name here', *argument_values[:-1])
当然,您需要粘贴最后一个参数,即argument_values[-1]
。 在这种情况下,只需使用关键字参数 :
func('some name here', *argument_values[:-1], arg6=argument_values[-1])
这是完整的脚本:
def func(name, arg1=0, arg2=0, arg3=0, arg4=0, argSkip=None, arg6=0):
print arg1, arg2, arg3, arg4, argSkip, arg6
argument_values = [
"value1", "value2", "value3", "value4", "value... SURPRISE! VALUE6"
]
func('some name here', *argument_values[:-1], arg6=argument_values[-1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.