我需要创建一个需要很多参数的类。
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