0
# test1.py
class DatabaseEngine(object):
pass
# test2.py
from test1 import DatabaseEngine
class OracleEngine(DatabaseEngine):
pass
# test3.py
from test1 import DatabaseEngine
class MysqlEngine(DatabaseEngine):
pass
# test4.py
# try 1
from test1 import DatabaseEngine
print DatabaseEngine.__subclasses__() # returns empty list
# try 2
from test2 import DatabaseEngine
from test3 import DatabaseEngine
print DatabaseEngine.__subclasses__() # returns [oracle, mysql]
を使用すると、なぜ#1 try1は、サブクラスを認識できないが、#try 2は、そのサブクラスを認識しないとき。それを行う方法は__subclasses __()の使用、複数のPYファイルに
私は
from test2 import DatabaseEngine
from test3 import DatabaseEngine
を行わずtest4.pyで__サブクラス()__を使用したいがありますか?
サブクラスは?ある時点でtest2.pyとtest3.pyをインポートしなかった場合、それらが宣言しているサブクラスは存在しません。あるいは、Pythonがハードディスク上のすべての.pyファイルを検索し、そのような宣言を探していると思われますか?単に 'import test2、test3'と書くことができます - それらに含まれる' DatabaseEngine'はtest1から直接インポートできるものとまったく同じです。 – jasonharper
@jasonharper。ありがとう。わかりました。私が提供するタイプに基づいて工場がdbエンジンを作成する工場パターンを作成しようとしています。私が提供する型に基づいてオブジェクトを作成するために、異なるクラス名をハードコードする代わりに、すべての基本クラスとループのサブクラスをプログラム的に取得し、必要なオブジェクトを取得したかったのです。だから、もし私がmysqlエンジンを追加したいのであれば、 'DatabaseEngine'''からサブクラスを作成し、クライアントからmysql型を提供するとmysqlエンジンが得られます。 – mkarun2
@jasonharper現在、ファクトリクラスには作成可能なエンジンオブジェクトのリストがあります。例えば[[OracleClassName]]。今私はmysqlを追加する必要がある場合、私はそれをサポートするために工場にコードを変更する必要があります。 – mkarun2