Importer sous-classe d'une classe de base en Python

J'ai une classe de base qui a une méthode qui crée une instance d'une sous-classe qui est appelée la même que la chaîne d'entrée.

Cela fonctionnait avant en mettant les sous-classes de la classe de base dans le même fichier, et de faire quelque chose comme globals()[name].

Maintenant, cependant, j'ai divisé les sous-classes dans d'autres fichiers. Ils ont chacun une import base déclaration au top, donc je ne peux pas simplement importer les sous-classes dans ma classe de base ou il va y avoir une chaîne de la circulaire de l'importation.

Est-il une solution pour cela?

Dans base.py:

from basefactory import BaseFactory
class Base:
    def __init__(self, arg1, arg2):
        ...
    def resolve(self, element):
        className = typing.getClassName(element)
        return BaseFactory.getInstance(className, element, self)

Dans basefactory.py:

from file1 import *
from file2 import *
...
class BaseFactory:
    @staticmethod
    def getInstance(name, arg1, arg2):
       subclass = globals()[name]
       return subclass(arg1, arg2)

Dans file1.py:

from base import Base

class subclass1(Base):
    def foo(self):
        return self.arg1
Est resolve() pour déterminer le type de classe, et de renvoyer une nouvelle instance de lui-même?
Il retourne une instance d'une sous-classe de Base.
Ce qui sur le déplacement de résoudre dans l'usine de la classe, qui est responsable du retour de l'instance correcte?

OriginalL'auteur Kevin Li | 2011-11-30