我有一个类,其方法是将数据加载到附加的pandas数据帧中。我希望我的方法是多态的,所以我对数据进行了两次isinstance
检查。在
我以前在python中读过,检查数据类型可能是一种不好的做法,但在本例中,我认为这是相关的。在这种情况下,有没有更好的编码方法?在
def add_data(self, data, **kwargs):
if isinstance(data, six.string_types):
if data.lower().endswith('.csv'):
self.csv_toFrame(data, kwargs)
elif data.lower().endswith('.xls', '.xlsx'):
self.excel_toFrame(data, kwargs)
elif isinstance(data, pd.DataFrame):
self.data_df = data
elif isinstance(data, Variable):
self.data_df = data.var_df
return
原则上使用isinstance没有什么错,有时它是唯一的解决方案。我认为你有一个很好的例子来说明这是更好的选择。在
在Python中,我们通常更喜欢“duck-typing”,而不是检查一个对象是否是某个特定类的实例,而是检查它是否具有我们需要的方法。在您的特定情况下,使用isinstance和duck类型似乎没有太大区别。在
鸭子类型的代码可能看起来像:
我认为它比你原来的代码可读性差得多。在
另一方面,如果您希望您的数据是一个文件流,并修改csv\utoframe和excel\utoframe以接受流,则可能值得考虑。你得调整一下你的打字检查
相关问题 更多 >
编程相关推荐