传递类实例化(分层)

时间:2010-08-31 19:35:52

标签: python database oop python-3.x

程序设计:

  • A类,实现较低级别的数据处理
    • 类B-E,它为A提供更高级别的接口以执行各种功能
      • F类,它是根据用户输入与B-E交互的UI对象

在任何给定时间只能有一个A实例化,以避免竞争条件,数据损坏等。

提供A到B-E副本的最佳方法是什么?当前F实例化A并在程序的生命周期中保留它,在创建它时将其传递给B-E。或者,我可以创建一个全局可用的模块,其中包含所有内容使用的A的共享副本。另一种方法是制作A的B-E子类,但这违反了只有一个A的约束(因为每个子类都是它们自己的数据处理程序,可以这么说)。

语言是Python 3,FWIW。

2 个答案:

答案 0 :(得分:4)

使用Borg代替单身人士。

>>> class Borg( object ):
...     __ss = {}
...     def __init__( self ):
...             self.__dict__ = self.__ss
...
>>> foo = Borg()
>>> foo.x = 1
>>> bar = Borg()
>>> bar.x
1

答案 1 :(得分:0)

如何使用模块技术,这要简单得多。

模块“A.py”中的

class A(object):
   def __init__(self, ..)
       ...
a = A()
模块“B.py”中的

from A import a

class B(object):
   def __init__(self)
       global a
       self.a = a

两者都有单个实例a。

对于其他类C,D,F等也可以这样做