在python中创建抽象层的正确方法

在python中创建抽象层的正确方法,python,Python,我正在做一个项目(http://github.com/lusis/vogeler). 目标之一是提供可交换的持久性和消息传递后端。我想我已经有了一个可行的模型,但我想从Python人群中获得关于最佳实践的信息。您可以在此处看到新的实现: couch2.py是我的泛型的子类 本质上,泛型类提供了一组公共接口(createdb、usedb、create、update),这些接口调用私有方法,如_create_db、_use_db等等 我的期望是,特定于数据库的东西将成为GenericPersist

我正在做一个项目(http://github.com/lusis/vogeler). 目标之一是提供可交换的持久性和消息传递后端。我想我已经有了一个可行的模型,但我想从Python人群中获得关于最佳实践的信息。您可以在此处看到新的实现:

couch2.py是我的泛型的子类

本质上,泛型类提供了一组公共接口(createdb、usedb、create、update),这些接口调用私有方法,如_create_db、_use_db等等


我的期望是,特定于数据库的东西将成为GenericPersistence的子类,并覆盖私有方法。那被认为是不好的形式吗?重写私有方法通常感觉有点奇怪,但最终的结果是它可以工作。我只是想确保我没有违反关于Python中子类化的某种不成文的约定。

我认为,按照惯例,单下划线暗示该属性是将来可能更改的实现细节。子类不应重写或调用带下划线的方法,因为它们的存在可能不可靠

因此,我将带下划线的方法更改为hook:
\u update
-->
update\u hook

并要求开发人员重写*_hook方法。

你应该看看
abc
模块,让你的泛型成为一个抽象类。我认为abc模块在这一点上可能有点过头了?我需要阅读更多关于它的细节,但粗略的一瞥让我觉得这太过分了。我想我使用_方法名称的原因是为了真正清楚地表明,除非您正在编写持久化后端,否则您应该调用它,但我也喜欢foo_钩子选项。因此我进行了重构,以使用钩子命名约定。谢谢