gpt4 book ai didi

python - 处理将一个类拆分为多个类的大多数 Pythonic 方式

转载 作者:太空狗 更新时间:2023-10-30 00:56:57 27 4
gpt4 key购买 nike

我有一个可以与 Oracle 或 MySQL 交互的类。该类使用“Oracle”或“MySQL”关键字和一些其他两种数据库类型的标准参数(打印什么、是否在异常时停止等)进行初始化。

当我开始时,根据需要添加 if Oracle 做 A,elif MySQL 做 B 很容易,但是当我添加更多只适用于一种数据库类型的专用代码时,这变得很难看.我已将该类分成两部分,一个用于 Oracle,一个用于 MySQL,具有一些共享功能以避免重复代码。

处理调用这些新类的最 Pythonic 方式是什么?我是否创建了一个使用相同关键字并返回正确类的包装函数/类?我是否更改所有调用旧泛型类的代码以调用正确的特定于 DB 的类?

如果需要,我很乐意模拟一些示例代码,但我认为没有必要。在此先感谢您的帮助!

最佳答案

Do I create a wrapper function/class that uses this same keyword and returns the correct class?

就是这个意思。这样的函数称为工厂函数:

def connect_to(db, *args):
if db == "MySQL":
return MySQL(*args)
elif db == "Oracle":
return Oracle(*args)
else:
raise ValueError("unknown database type: %r" % db)

确保两个数据库类具有相同的 API。您可以使用鸭子类型或抽象基类 (ABC) 来实现此目的;如果功能在类之间共享,或者如果您想执行 isinstance 检查以查明对象是否表示数据库连接,则后者最有用。

在共享功能的情况下,template method pattern经常派上用场。

关于python - 处理将一个类拆分为多个类的大多数 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13125271/

27 4 0
文章推荐: python - 如何在 TkInter 中创建平铺布局/流布局?
文章推荐: c# - 什么开源消息队列软件提供严格排序的持久性?
文章推荐: c# - 将 List 写入数据库的速度有多快?