在Python中创建抽象层的正确方法
我正在做一个项目(http://github.com/lusis/vogeler)。这个项目的一个目标是提供可以替换的持久化和消息传递后端。我觉得我已经有了一个可行的模型,但想听听Python圈子里的人对最佳实践的看法。你可以在这里看到新的实现:
http://github.com/lusis/vogeler/blob/master/vogeler/db/generic.py
couch2.py是我对generic的子类。
简单来说,generic类提供了一组通用的接口(比如创建数据库、使用数据库、创建和更新),这些接口会调用一些私有方法,比如_create_db、_use_db等等。
我希望数据库特定的内容会继承GenericPersistence,并重写这些私有方法。这样做算不算不太好?重写私有方法总感觉有点奇怪,但最终结果是可以工作的。我只是想确认一下,我是不是在破坏Python中关于子类化的一些不成文的规则。
1 个回答
0
我觉得,按照惯例,前面加一个下划线的属性是个提示,说明这个属性是实现细节,未来可能会改变。子类不应该去重写或者调用带下划线的方法,因为这些方法的存在可能不可靠。
所以,我会把带下划线的方法改成钩子函数:_update
改成 update_hook
,然后建议开发者去重写这些 *_hook 方法。