关于oop:具有嵌套布局的Python类层次结构 – 它有意义吗?

Python class hierarchy with nested layout - does it make sense?

我遇到了一些奇怪的错误,只是问自己在我的类层次结构中是否有一个基本的问题。如果涉及到Python,我绝对是个新手。所以,如果这种方法看起来像是废话-你知道为什么是这样的:—)

我在一个围绕MVC模式设计的应用程序中有几个类。应用程序控制器控制着四个我称之为"设备"的对象,因为它们就像独立的设备。在本例中,每个设备都运行操作(计算)和图像处理。这些操作旨在在单独的线程中运行。所以每个设备都应该打开一个"自己的"线程,并在该线程中进行计算。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/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派生的!

我的问题是:虽然这些东西在安装过程中似乎可以工作,但我会得到运行时错误。还不确定它们来自哪里,它们的意思是什么。但首先,我想了解我所组成的类层次结构布局是否有意义?这完全是胡说八道吗?或者是常用的?

谢谢!


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

1
2
3
4
5
6
7
8
9
10
11
12
   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

但是,您也可以轻松地定义FaseYiType类,并将它们分配给"FaseYiType"类成员,例如

1
2
3
4
5
class Shoe(BaseFactory.FactoryItem):
    ...

class ShoeFactory(BaseFactory):
    FactoryItem = Shoe

我遇到的唯一问题是对象的反序列化。我真的记不清什么时候、什么地方、为什么要使用pickle,可能pickle在某个地方被使用,它未能解析嵌套类。

您遇到了哪些特定的运行时问题?