我有一个函数/方法A()
,它需要一些参数(包括可选参数)。另一个函数B()
对要传递给所述函数A()
的数据进行预处理。我很少有函数B()
的替代实现,这使我对两者的优点产生了混淆。
我想知道其中哪一个(如果有的话)我应该使用。你知道吗
毕竟,There should be one-- and preferably only one --obvious way to do it.
以下是代码片段:
class Foo(object):
def __init__(self, param1, param2, param3=None):
self.param1 = param1
self.param2 = param2
self.param3 = param3
@classmethod
def from_dump_v1(cls, dump):
param1, param2, param3 = dump.get('param_1'), dump.get('_param_2'), dump.get('paramThree')
return cls(param1, param2, param3)
@classmethod
def from_dump_v2(cls, dump):
dump['param1'] = dump.pop('param_1')
dump['param2'] = dump.pop('_param_2')
dump['param3'] = dump.pop('paramThree')
return cls(**dump)
@classmethod
def from_dump_v3(cls, dump):
result = dict()
result['param1'] = dump.get('param_1')
result['param2'] = dump.get('_param_2')
result['param3'] = dump.get('paramThree')
return cls(**result)
在上面的代码中,__init__
表示A()
,from_dump_v*
表示我需要从中选择的不同实现。
注意:在所有情况下,dump
是一个具有3个键值对的字典,即param_1
、_param_2
和paramThree
。你知道吗
一个显而易见的方法是:
在
dump
dict持有任意键的情况下,我看不到一种明显的方法来做到这一点;我不是荷兰人。你知道吗但是,通过对工厂函数的参数进行一些控制,可以将数据类型更改为序列而不是dict,然后使用
enumerate
执行一些明显的操作:似乎您正在创建一个工厂函数来处理类初始化。因此,要实现这一点,可以使用
*args
和**kwargs
将任意数量的参数(参数和关键字参数)传递给工厂函数。但这似乎是多余的。你知道吗因此,您可以有如下内容:
在
from_dump_vx
中,您可以根据自己的偏好处理*args
和**kwargs
中的值,然后将它们传递给类的__init__
方法。你知道吗然后你可以像这样初始化你的类:
相关问题 更多 >
编程相关推荐