第一档:
class Profile(object):
def __init__(self, name, 1st_arg=gst(), 2nd_arg=1, 3rd_arg=AB.parallel):
self.name = name
self.gain = 1st_arg(i, o, p)
self.channel = 2nd_arg
self.mode = 3rd_arg
第二档:
class A:
some_function():
1st_arg = gst(i, o, p) # class gst constructor
result = Profile(Name, 1st_arg, 2nd_arg=1, 3rd_arg=Phase) # profile class constructor
我有上面的代码,但我想将“1st_arg”从关键字参数更改为命名参数。
这里,2nd_arg和3rd_arg参数清楚地指明了他们的值被分配给谁,但在1st_arg中却不一样。
我想要这个改变,以便如果某个第三方看到了我的代码,那么他就会很容易理解。
答案 0 :(得分:0)
如果要将位置参数转换为关键字参数(并且它是最后一个关键字参数),只需指定其名称即可。例如,如果您调用以下表单:
f(val1, val2, arg3=val3, arg4=val4)
并且您希望提供val2
作为关键字参数,只需将其称为
f(val1, arg2=val2, arg3=val3, arg4=val4)
如果要转换的参数不是最后一个位置参数,则必须将所有后续位置参数转换为关键字参数。
答案 1 :(得分:0)
简单,只需将参数从关键字参数更改为位置参数:
class Profile(object):
def __init__(self, name, gst, 2nd_arg=1, 3rd_arg=AB.parallel):
self.name = name
self.gain = gst(i, o, p)
self.channel = 2nd_arg
self.mode = 3rd_arg
但是,你有一个更大的问题。在Python中调用方法签名中的函数只能在编译时调用该函数一次。因此,如果您注意到与方法签名中的gst()
相关的一些异常行为,那就是原因。如果将函数引用作为参数传递,则可以稍后调用它。不要在方法签名本身中调用gst()
,只需将其作为gst
传递。
编辑:我认为这就是你所追求的目标
class Profile(object):
def __init__(self, name, 1st_arg=gst(sane, default, args), 2nd_arg=1, 3rd_arg=AB.parallel):
self.name = name
self.gain = 1st_arg
self.channel = 2nd_arg
self.mode = 3rd_arg
value = gst(i, o, p)
result = Profile(Name, 1st_arg=value, 2nd_arg=1, 3rd_arg=Phase)