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

0 投票
1 回答
868 浏览
提问于 2025-04-17 14:02

我遇到了一些奇怪的错误,心里在想我是不是在类的层次结构上有根本性的问题。说实话,我对Python完全是个新手。所以如果我的这个做法看起来完全不靠谱,你们也知道为什么了 :-)

我在一个应用程序中设计了几个类,采用的是MVC模式。这个应用的控制器管理着四个我称之为“设备”的对象,因为它们像独立的设备一样运作。每个设备执行一些操作(计算),在这个例子中是图像处理。这些操作应该在不同的线程中运行。所以每个设备都应该开启一个“自己的”线程,并在那个线程中完成计算。

为此,我设计了一个描述“设备”的基类,这样所有设备都可以继承它的基本设置和逻辑,特别是它们如何被控制器控制。关于线程,我实现了一个“工作者”类,打算把这个类的实例放入线程中。这个部分现在还没有工作。那些工作者类是这样设计的:基设备类里面包含一个嵌套的工作者基类。它还实现了一些基本的控制方法,用来处理作为基设备类成员存储的工作者实例。所有专门的设备类(从基设备类派生)也实现了一个嵌套的工作者类。这些类是从基设备类里面的基工作者类派生的。下面是层次结构的草图:

/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派生的!

我的问题是:虽然在设置过程中一切看起来都正常,但我在运行时却遇到了错误。我还不确定这些错误是从哪里来的,意味着什么。不过首先我想搞清楚我设计的这个类层次结构是否合理?它是不是完全扭曲的 nonsense?还是说在实际中是常见的?

谢谢!

1 个回答

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,但它没能解析嵌套类。

你遇到了什么具体的运行时问题呢?

撰写回答