簡體   English   中英

具有嵌套布局的Python類層次結構-有意義嗎?

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

我遇到了一些奇怪的錯誤,只是問自己,我的班級層次結構是否存在基本問題。 如果涉及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

我的問題是:盡管這些東西在安裝過程中似乎可以正常工作,但我遇到運行時錯誤。 還不確定它們來自哪里,它們的意思。 但是首先,我想了解我組成的類層次結構布局是否真的有意義? 完全是胡說八道嗎? 還是常用?

謝謝!

嵌套類很有意義。 Django將它們用於模型和表格中的元配置。 我有時以工廠模式使用它們,例如

   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,但無法解析嵌套類。

您遇到什么特定的運行時問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM