Pythonic方法用很多参数和默认值初始化一个对象

时间:2017-07-25 08:18:17

标签: python python-3.x

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

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

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

3 个答案:

答案 0 :(得分:8)

由于您将所有关键字参数的默认值设置为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):
        ...

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

您可以使用* args即

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