Сделать подклассы общедоступными для базового класса

У меня есть абстрактный базовый класс, который несет методы, действующие на данных, которые были предоставлены экземпляром дочернего класса. Для некоторых из этих методов результат является одним из подклассов, в зависимости от некоторого вычисленного значения.

По причине структурирования кода базовый класс находится в собственном модуле:

./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, которые в идеале все автоматически распознаются базовым классом. Это возможно каким-либо образом?

0 ответов

Другие вопросы по тегам