2
在我來說,我有這個類:基於什麼內部**kwargs
什麼是處理變量的更多pythonic方法?
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)添加更多參數,以傳遞給此類。事情是我真的不知道我是否需要添加2個或10個以上的參數。
現在我在執行此類中的邏輯時使用了self.<variable>
。例如:
self.check_columns(self.table_name, self.header)
我其他的想法是使用self.metadata['variable']
,而不是self....
。 最後,我最後的想法是創建一個單獨的類,將保存所有的self.header
和所有這些。但在我的代碼,我會這樣稱呼它:
metadata = Metadata()
metadata.header
所以有很多方法可以做到這一點,什麼是最pythonic的方式。另外,我保持我的代碼在邏輯上是分離的,乾淨且容易讀取的。
您應該考慮使用'__getattr__'。它可以讓你提供對屬性的訪問,同時只保留「self.metadata」中的所有內容。即您可以提供更友好的用戶界面,同時保持簡單而小巧的實現,而不需要很多屬性。稍後,您可以修改'__getattr__'的樸素實現來執行更多操作(例如,即時計算「派生」屬性等) – Bakuriu