原则上使用isinstance没有什么错,有时它是唯一的解决方案。我认为你有一个很好的例子来说明这是更好的选择。在
在Python中,我们通常更喜欢“duck-typing”,而不是检查一个对象是否是某个特定类的实例,而是检查它是否具有我们需要的方法。在您的特定情况下,使用isinstance和duck类型似乎没有太大区别。在
鸭子类型的代码可能看起来像:def add_data(self, data, **kwargs):
try:
self.csv_toFrame(data, kwargs)
except:
try:
self.excel_toFrame(data, kwargs)
except:
try:
self.data_df = data.var_df
except:
#some check to make sure it's a data-frame
self.data_df = data
return
我认为它比你原来的代码可读性差得多。在
另一方面,如果您希望您的数据是一个文件流,并修改csv\utoframe和excel\utoframe以接受流,则可能值得考虑。你得调整一下你的打字检查