0

いくつかの奇妙なエラーに遭遇し、自分のクラス階層に根本的な問題があるかどうか自問してみました。Pythonに関しては、私はまったくの初心者です。したがって、このアプローチがまったくのがらくたのように見える場合は、その理由がわかります:-)

MVC パターンに基づいて設計したアプリケーションに、いくつかのクラスがあります。アプリケーション コントローラは、私が「デバイス」と呼ぶ 4 つのオブジェクトを制御します。これらのオブジェクトは独立したデバイスのように動作するからです。各デバイスはアクション (計算)、この場合は画像処理を実行します。これらのアクションは、個別のスレッド内で実行されることを意図しています。したがって、各デバイスは「独自の」スレッドを開き、そのスレッドで計算を行う必要があります。

このために、「デバイス」を記述する基本クラスを設計したため、すべてのデバイスが基本的なセットアップとロジック、特にコントローラーによる制御方法を継承します。「ワーカー」クラスを実装したスレッドについては、そのクラスのインスタンスをスレッドにプッシュする予定です。その部分はまだ機能していません。これらのワーカー クラスは次のように設計されています。基本デバイス クラスには、ネストされたワーカー基本クラスが含まれています。また、基本デバイス クラスのメンバーとして格納されているワーカー インスタンスを処理するためのいくつかの基本的な制御メソッドも実装します。すべての特殊化されたデバイス クラス (基本デバイス クラスから派生) も、ネストされたワーカー クラスを実装します。これらのクラスは、基本デバイス クラス内にネストされた基本ワーカー クラスから派生します。階層のスケッチは次のとおりです。

/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

fooWorkerクラスとクラスは両方とも!barWorkerから派生していることに注意してください。Device.Worker

私の質問は: セットアップ中に動作しているように見えますが、実行時エラーが発生します。それらがどこから来たのか、何を意味するのかはまだわかりません。しかし、最初に、私が作成したクラス階層レイアウトがまったく意味があることを理解したいと思いますか? それは完全にねじれたナンセンスですか?それとも常用?

ありがとう!

4

1 に答える 1

1

ネストされたクラスは理にかなっています。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

私が遭遇した唯一の問題は、オブジェクトの逆シリアル化です。いつ/どこで/なぜ、ピクルがどこかで使用されていて、ネストされたクラスの解決に失敗した可能性があります。

どのようなランタイムの問題が発生していますか?

于 2013-01-29T11:27:08.797 に答える