我目前正在进行一些重型数据分析项目,并且正在尝试创建一个Python包装器类,以帮助简化清理数据时所涉及的许多普通预处理步骤,将其划分为测试/验证集,将其标准化最终的想法是将原始数据转换为易于消费的处理矩阵,以便机器学习算法输入用于培训和测试目的。理想情况下,我正朝着
的方向努力data = DataModel(AbstractDataModel)
processed_data = data.execute_pipeline(**kwargs)
因此,在很多情况下,我会从self.df
开始,这是我的实例的pandas
数据框对象。但是可以将一种方法称为standardize_data()
,并最终返回名为self.std_df
的标准化数据框。
我的IDE一直在抱怨我在__init__
之外初始化变量。因此,为了安抚PyCharm,我在构造函数中使用了以下代码:
class AbstractDataModel(ABC):
@abstractmethod
def __init__(self, input_path, ..., **kwargs):
self.df_train, self.df_test, self.train_ID, self.test_ID, self.primary_key, ... (many more variables) = None, None, None, None, None, ...
稍后,正在初始化和设置这些属性。我承认我来自重型Java Spring项目,所以我仍然习惯于冗长地声明变量。是否有更多Pythonic方式在此处声明我的实例属性?我知道我必须使用所有None
值来违反DRY。
我已经研究过SO,并遇到了这个similar question,但提供的答案更多是关于通过argv
设置实例变量,所以它不是直接的解决方案在我的背景下。
答案 0 :(得分:2)
使用链式分配:
item-2
或者设置默认为self.df_train = self.df_test = self.train_ID = self.test_ID = self.primary_key = ... = None
的抽象属性(所以你不必设置它们)