2

ファクトリ関数、スーパー クラス、および 2 つのサブクラスを含む作業モジュールがあります。実際のモジュールはこちらです。

ファクトリを独自のファイルに分割し、2 つのサブクラスを commands/ ディレクトリに配置して、スーパーを含むモジュールにサブクラスをインポートすることによって引き起こされる再帰の問題を回避できるようにしました。

すべてが正しくインポートされたと思ったときに、試してみると、ファクトリはサブクラスの空のリストで立ち往生しています。

for cls in Command.__subclasses__():
4

1 に答える 1

0

きれいではありませんが、機能します。文字列をクラス名に変換するよりエレガントな方法が欲しいです。__subclasses__ をループするのは、実に厄介でした。メタクラスを適用するのに十分なほどよく理解していません。

from commands.shVersionCmd import shVersionCmd
from commands.shVRFCmd import shVRFCmd
def CommandFactory(commandnode):
    if commandnode.attrib['name'] == 'shVersionCmd': return shVersionCmd(commandnode)        
    if commandnode.attrib['name'] == 'shVRFCmd': return shVRFCmd(commandnode)
于 2013-02-23T13:04:18.527 に答える