Pythonic 方法使用大量参数和默认值初始化对象



我需要创建一个需要很多参数的类。

class Line:
def __init__(self, name, nb = None, price_unit = None, total = None, 
unit = None, time = None, session = None ):

每个属性都将获得与传递给__init__((的参数相同的名称和值。

所以,我当然可以做:

class MyClass:
def __init__(self, name, nb = None, price_unit = None, total = None, 
unit = None, time = None, session = None ):
self.name = name
self.nb = nb
self.price = price
self.price_unit = price_unit
self.total = total
self.unit = unit
self.time = time
self.session = session

但这是一个非常沉重的符号,对我来说似乎并不蟒蛇。你知道一种更蟒蛇的方式吗?

由于您要将所有关键字参数的默认值设置为None,因此您可以执行更具可读性的操作:

class MyClass:
def __init__(self, name, **kwargs):
self.name = name
for attr in ('nb', 'price_unit', 'total', 'unit', 'time', 'session'):
setattr(self, attr, kwargs.get(attr))

但是,我认为您的初始方法也非常标准,尽管您可以通过删除参数及其默认值之间的空格来改进它。

class MyClass:
def __init__(self, name, nb=None, price_unit=None, total=None, 
unit=None, time=None, session=None):
...

以一种非常pythonic的方式,它可以是:

class MyClass:
def __init__(self, name, **kwargs):
self.name = name
self.__dict__.update(kwargs)

你可以使用*args,即

def __init__(self, *args):
self.args = args