@FCKJesus

Как сделать неопределённое наследование в python?

Есть N- количество классов:
class Validator:
class ApparelBeauty(Validator):
class ElectronicsSport(Validator):

и так далее

Надо в зависимости от условия унаследовать полученный один из классов.
class AutomaticWorker(active_class = check_active_category()):

А так же есть функция которая должна подставлять имена классов
def check_active_category():
	...
	if config.getboolean('category', 'Apparel&Beauty') == True:
		return ApparelBeauty.__name__


Получаю ошибку
TypeError: AutomaticWorker.__init_subclass__() takes no keyword arguments
  • Вопрос задан
  • 276 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Вообще сама необходимость в таком коде уже признак серьёзных проблем.
Но если очень надо... В питоне классы - это объекты первой категории. С ними можно делать всё то же, что и с другими объектами, например, возвращать их из функций. Так что незачем возиться с class_name.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
lxstvayne
@lxstvayne
Люблю Python
Есть вот такой вариант решения через метаклассы:
import inspect

my_dog_age = 7


class SmallDog:
    pass


class MiddleDog:
    pass


class BigDog:
    pass


class DogMeta(type):
    def __new__(mcs, name, bases, namespace):

        dog = SmallDog
        if my_dog_age >= 10:
            dog = BigDog
        elif my_dog_age >= 5:
            dog = MiddleDog

        return super().__new__(mcs, name, (dog,), namespace)


class Dog(metaclass=DogMeta):
    pass


class MyDog(Dog):
    pass


print(inspect.getmro(MyDog))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы