当前位置:  开发笔记 > 编程语言 > 正文

Python类工厂......还是?

如何解决《Python类工厂还是?》经验,为你挑选了1个好方法。

我们在C#中有一个数据库库,我们可以这样使用:

DatabaseConnection conn = DatabaseConnection.FromConnectionString("...");

该库隐藏了不同数据库引擎之间的许多差异,如SQL函数名称,参数名称和规范等.

在内部,DatabaseConnection类是实现一些基本方法的抽象类,但该FromConnectionString方法运行一个处理实际差异的已注册专用类型列表,并构造一个正确类的对象.换句话说,我没有得到一个DatabaseConnection对象,我得到了一个MSSQLDatabaseConnection或OracleDatabaseConnection对象,当然它继承自DatabaseConnection.

连接字符串包含有关此连接的数据库引擎类型和版本的信息.

我想用Python创建一个类似的库.制作可以这样构造的东西的正确方法是什么?

conn = DatabaseConnection("...")

或使用类方法?

conn = DatabaseConnection.FromConnectionString("...")

是第一个甚至是可能的,那就是...根据传递的字符串中的数据构建这样的对象并获取其他东西,一个专门的对象?

好吧,让我问一个不同的问题...... 这样做的pythonic方法是什么?

我基本上也希望在Python中拥有DatabaseConnection基类,实现常用方法,并专注于派生类,并在某处基于连接字符串构造并返回正确类型的对象的方法或函数.



1> Andru Luvisi..:

这在Python中是可行的,但可能不是最好的方法.类工厂模式本质上是没有第一类类的语言的变通方法.由于Python确实有第一类类,因此可以将类存储在变量中,并直接使用该类创建实例.要更改创建的类,请在变量中存储不同的类.

例如:

class class1:
  def greet(self):
    print "hi"

class class2:
  def greet(self):
    print "hello"

maker = class1
obj1 = maker()

maker = class2
obj2 = maker()

obj1.greet() # prints "hi"
obj2.greet() # prints "hello"

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有