这就是我的看法:
class BaseHandler:
def open(self): pass
def close(self): pass
class TXTHandler(BaseHandler):
def open(self): pass
def close(self): pass
class XMLHandler(BaseHandler):
def open(self): pass
def close(self): pass
def open_file(file_path):
handler = BaseHandler(file_path)
例如,如果file_path是'.. \ file.xml',它必须返回XMLHandler。 有谁能告诉我,我需要做些什么来实现这个功能?
我知道我可以通过if-elif-else语句实现这一点,但我正在努力避免一打elif。
答案 0 :(得分:2)
这是我首选的pythonic方式:
import os
handlers = {'.xml': XMLHandler, '.txt': TxtHandler}
def open_file(file_path):
ext = os.path.splitext(file_path)[1]
handler = handlers.get(ext, BaseHandler)
在上面的代码中,我使用字典将处理程序与扩展名相关联。
在open_file
函数中,我提取扩展并使用它从字典中获取处理程序,同时考虑密钥不存在的情况。
我也可以这样做:
if ext in handlers:
handler = handlers[ext]
else:
handler = BaseHandler
但当然使用字典的get
方法更好!
答案 1 :(得分:1)
您可以根据文件类型,例如通过检查此处的扩展名:Checking file extension 选择一个合适的处理程序类。
沿着这些方向:
def open_file(file_path):
if file_path.lower().endswith('.txt'):
handler = TxtHandler(file_path)
elif file_path.lower().endswith('.xml'):
handler = XMLHandler(file_path)
else:
handler = BaseHandler(file_path) #or error