嵌套布局的Python类层次结构 - 它有意义吗?

时间:2013-01-29 10:29:47

标签: python oop class inheritance hierarchy

我遇到了一些奇怪的错误,只是问自己我的班级层次结构中是否存在根本问题。如果谈到python,我是一个绝对的新手。因此,如果这种方法看起来像完全废话 - 你知道为什么: - )

我在围绕MVC模式设计的应用程序中有几个类。应用程序控制器可以控制我称之为“设备”的四个对象,因为它们就像独立设备一样。在这种情况下,每个设备都运行动作(计算),图像处理。这些操作意味着在单独的线程中运行。因此,每个设备应该打开一个“自己的”线程,并在该线程中完成计算。

为此,我设计了一个描述'设备'的基类,因此所有设备都继承了它们的基本设置和逻辑,尤其是它们由控制器控制的方式。对于我实现了'worker'类的线程,我计划将这些类实例推送到线程中。那部分还没有成功。这些工作类的设计如下:基本设备类包含嵌套的工作者基类。它还实现了一些基本的控制方法来处理作为基本设备类的成员存储的工作者实例。所有专用设备类(派生自基础设备类)也实现嵌套的工作类。这些类派生自嵌套在基本设备类中的基础工作者类。这是层次结构的草图:

/class Device/
             /methods
             /members
             /class Worker/
                          /methods
                          /members
/class fooDevice(Device)/
                        /methods
                        /members
                        /class fooWorker(Device.Worker)/
                                                       /methods
                                                       /members
/class barDevice(Device)/
                        /methods
                        /members
                        /class barWorker(Device.Worker)/
                                                       /methods
                                                       /members

请注意,类fooWorkerbarWorker都来自Device.Worker

我的问题是: 虽然这些东西似乎在安装过程中起作用,但我得到运行时错不确定他们来自哪里,他们的意思。但首先我想了解我编写的类层次结构布局确实有意义吗?它是完全扭曲的废话吗?还是常用?

谢谢!

1 个答案:

答案 0 :(得分:1)

嵌套类可能有意义。 Django将它们用于模型和表单中的Meta配置。我有时会在工厂模式中使用它们,例如

   class BaseFactory(object):
      class FactoryItem(object):
          pass 

      @classmethod
      def create(cls):
          return cls.FactoryItem()

   class ShoeFactory(BaseFactory):
      class FactoryItem(BaseFactory.FactoryItem):
          def laces(self):
              return 1

但您可以轻松地全局定义FactoryItem类并将它们分配给“FactoryItem”类成员,例如。

class Shoe(BaseFactory.FactoryItem):
    ...

class ShoeFactory(BaseFactory):
    FactoryItem = Shoe

我遇到的唯一问题是对象的反序列化。我真的不记得何时/何地/为什么,可能是在某处使用pickle并且它无法解析嵌套类。

您遇到了哪些具体的运行时问题?