处理变量的pythonic方法是什么?

时间:2013-11-14 22:22:07

标签: python

在我的情况下,我有这个课程:

 class CSVUploader():                                                                                                                                          
     def __init__(self, **kwargs):                                               
         self.acc = kwargs['acc']                                                
         self.prod = kwargs['prod']                                              
         self.url_id = kwargs['url_id']                                          
         self.dest = kwargs['dest']                                              
         self.header = kwargs['header']                                          
         self.metadata = kwargs.copy()                                           
         self.table_name = '_'.join([self.prod, self.url_id])

这个类包含很多信息,并根据**kwargs中的内容做了很多事情。稍后我将需要向字典中添加更多参数(** kwargs),我将这些参数传递给此类。问题是我真的不知道是否需要添加2或10个参数。

现在我在这个类中执行逻辑时使用self.<variable>。例如:

self.check_columns(self.table_name, self.header)

我的另一个想法是使用self.metadata['variable']而不是self....。 最后我的想法是创建一个单独的类,它将保存所有self.header和所有这些。但在我的代码中,我会这样称呼它:

metadata = Metadata()
metadata.header

所以有很多方法可以做到这一点,最蟒蛇的方式是什么。另外,我很有意思保持我的代码在逻辑上分离,清晰且易于阅读。

1 个答案:

答案 0 :(得分:0)

您可以将kwargs中的所有变量添加到实例中:

class CSVUploader():       
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

或者,您可以使用命名元组并将CSVUploader的方法更改为对其起作用的函数。

CSVUploader = collections.namedtuple('CSVUploader', list_of_variable_names)