在我的情况下,我有这个课程:
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
所以有很多方法可以做到这一点,最蟒蛇的方式是什么。另外,我很有意思保持我的代码在逻辑上分离,清晰且易于阅读。
答案 0 :(得分:0)
您可以将kwargs中的所有变量添加到实例中:
class CSVUploader():
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
或者,您可以使用命名元组并将CSVUploader的方法更改为对其起作用的函数。
CSVUploader = collections.namedtuple('CSVUploader', list_of_variable_names)