Сделать подклассы общедоступными для базового класса
У меня есть абстрактный базовый класс, который несет методы, действующие на данных, которые были предоставлены экземпляром дочернего класса. Для некоторых из этих методов результат является одним из подклассов, в зависимости от некоторого вычисленного значения.
По причине структурирования кода базовый класс находится в собственном модуле:
./baseclasses.py
class baseclass(object):
def __init__(self, a, b):
super(baseclass, self).__init__()
self.a = a
self.b = b
def method(self, input):
"""Do stuff with input"""
if hasattr("thisattribute", input):
result = childclasses.childclass1("newinput")
else:
result = childclasses.childclass2("newinput")
return result
./childclasses.py
from .baseclasses import baseclass
class childclass1(baseclass):
def __init__(self, a, b, c):
super(childclass1, self).__init__(a, b)
self.c = c
class childclass2(baseclass):
def __init__(self, a, b, d):
super(childclass2, self).__init__(a, b)
self.d = d
Теперь базовый класс должен знать, что такое childclass1 и childclass2, но не может, потому что дочерние классы определены с использованием baseclass, поэтому я не могу импортировать дочерние классы в модуль baseclass. Кроме того, я бы хотел, чтобы можно было определить произвольное количество дочерних классов в childclasses.py, которые в идеале все автоматически распознаются базовым классом. Это возможно каким-либо образом?