跨模块重用类对象

时间:2015-10-30 14:50:04

标签: python ruby

我试图了解在python中重用模块中类的实例的最佳方法...

在ruby中,我可以通过执行以下操作来实现此目的:

module MyMod
  def client
    @var ||= DBClient.new
  end

  def query
    client.select(...)
  end
end

假设下面在python中是等价的是正确的吗?

class Client():
    connection = DBClient()

def query():
    Client().connection.select(...)

在python标准中上面可以吗?有更好的方法吗?谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

不,这些事情根本不相同。 Ruby代码实例化一次连接并将其分配给实例var;每次调用query时,Python代码都会创建一个新的Client实例,尽管它们共享连接实例。

但是没有必要添加包装器。如果要创建一次,请在模块级别执行此操作:

connection = DBClient()

def query():
    connection.select(...)

真的,你应该停止在Python中编写Ruby;如果你想编写Python,你应该学习如何在Python中以惯用方式编写东西,而不是简单地直接翻译你的Ruby代码。