2017-07-25 95 views
4

我需要創建一個類,它需要很多參數。用很多參數和默認值初始化一個對象的Python方法

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 

但是,這是一個非常沉重的符號和似乎並不Python的我。你知道更多的pythonic方式嗎?

+0

你已經在使用Python的方式來初始化默認值的對象。問題來自您的Class API。如果爭論太多,你應該考慮重構它。 – Delgan

回答

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): 
     ... 
+0

在** kwargs的情況下,您還可以僅使用您想要的參數來初始化對象:MyClass(name,price_unit = value,total = value2) – Lucian

-1

您可以使用* ARGS即

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

在一個非常Python化的方式,則可能是:

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

不適用於描述符和插槽。 –

相關問題