Наследование от класса переменных в Python - PullRequest
0 голосов
/ 26 августа 2018

У меня есть класс foo, который наследуется от bar. Однако я также хочу иметь возможность при инициализации foo наследовать его от стены вместо бара. Я думаю что-то вроде этого:

class Foo():
    def __init__(self, pclass):
        self.inherit(pclass)
        super().__init__()

Foo(Bar) # child of Bar
Foo(Wall) # child of Wall

Возможно ли это в Python?

1 Ответ

0 голосов
/ 26 августа 2018

Это не очень просто, потому что классы определяются во время выполнения блока классов, а не во время создания экземпляра.

Вместо этого популярным шаблоном проектирования будет ставить общийкод в mixin :

class FooMixin:
    # stuff needed by both Foo(Bar) and Foo(Wall)

class FooBar(FooMixin, Bar):
    ...

class FooWall(FooMixin, Wall):
    ...

Тогда вы можете использовать какую-то заводскую функцию:

def make_foo(parent, *init_args, **init_kwargs):
    if parent is Bar:
        Foo = FooBar
    elif parent is Wall:
        Foo = FooWall
    return Foo(*init_args, **init_kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...