Python开发,创建全局类对象

Python开发,创建全局类对象,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我不确定这是在开发方面可以做的事情,还是在Python中应该避免做的事情。我有一个像这样的班级结构 Main GUI Class Has a Draw Manager object Draw Manager Class Has a Database Manager object Database Manager Object .... 问题是我希望我的数据库管理器完全独立于我的其他程序功能,因此任何与数据库相关的内容都完全封装在一个类中。但是如果我只需要一个对象,其

我不确定这是在开发方面可以做的事情,还是在Python中应该避免做的事情。我有一个像这样的班级结构

Main GUI Class
    Has a Draw Manager object

Draw Manager Class
    Has a Database Manager object

Database Manager Object
    ....
问题是我希望我的数据库管理器完全独立于我的其他程序功能,因此任何与数据库相关的内容都完全封装在一个类中。但是如果我只需要一个对象,其他类将调用它,例如

Main GUI Class

    def displayDatabase(self):
        databaseObject.getJSON()

Draw Manager Class

    def drawPolygon(self):
        polygonObj = Polygon(...)
        # draw polygon
        databaseObject.notifyAdd(polygonObj)
简单地创建类并在其下面声明一个将用于整个程序的对象可以吗

# dbmanage.py
Database Manager Class

     ...

dbManager = Database ManagerClass ()
那么在我的其他文件中,是否只包含对象

# drawmanage.py
from dbmanage import dbManager

...

# mainwindow.py
from dbmanage import dbManager

...

if __name__ == "__main__":

    ...

这是一个合理的设计吗?或者这是一个糟糕的编程/一件糟糕的事情吗?

我最初的反应是“您应该使用依赖项注入”,但Python的动态特性意味着这基本上就是依赖项注入(或者至少,它足够灵活,可以在需要时变为依赖项注入)。尽管如此,您可能希望将其设置为全局变量,而不仅仅是将其设置为全局变量。@Kevin对于python 2.7来说,函数存在于2.7中如何。我只是举一个例子,说明这个模式是如何在3.4中使用的。感觉像是
classmethods
…我知道我更愿意在主GUI init中创建DatabaseManager,并找到一种方法将其传递给其他对象。也许你可以读到:我最初的反应是“你应该使用依赖注入”,但Python的动态特性意味着这基本上是依赖注入(或者至少,它足够灵活,可以在需要时成为依赖注入)。尽管如此,您可能希望将其设置为全局变量,而不仅仅是将其设置为全局变量。@Kevin对于python 2.7来说,函数存在于2.7中如何。我只是举一个例子,说明这个模式是如何在3.4中使用的。感觉像是
classmethods
…我知道我更愿意在主GUI init中创建DatabaseManager,并找到一种方法将其传递给其他对象。也许你可以读到:我最初的反应是“你应该使用依赖注入”,但Python的动态特性意味着这基本上是依赖注入(或者至少,它足够灵活,可以在需要时成为依赖注入)。尽管如此,您可能希望将其设置为全局变量,而不仅仅是将其设置为全局变量。@Kevin对于python 2.7来说,函数存在于2.7中如何。我只是举一个例子,说明这个模式是如何在3.4中使用的。感觉像是
classmethods
…我知道我更愿意在主GUI init中创建DatabaseManager,并找到一种方法将其传递给其他对象。也许你可以阅读: