Должен ли я принять аргумент в качестве объекта наследования? - PullRequest
0 голосов
/ 27 февраля 2019

Итак, я натолкнулся на мысль, о которой я думал.Я с подозрением отношусь к этому, но это работает, поэтому мне было интересно, есть ли у кого-нибудь опыт работы с чем-то вроде этого:

def make_new_class(Koola,Booba):

    class Bar(Koola,Booba):
        def __init__(self):
            Koola.__init__(self)
            Booba.__init__(self)

    return Bar

Где Koola и Booba - другие классы.

Так что на самом деле это работает.Но нашли очень мало разговоров об этой возможности.

Это хорошая практика?Если нет, каковы альтернативы?

Если вам интересно, где это может произойти;Это может возникнуть в ситуациях, когда вам нужен класс, который наследуется от множества подклассов.Возможно, у вас есть куча алгоритмов, которые делают одно и то же по-разному, и вы хотите соединить их вместе, как легос.

1 Ответ

0 голосов
/ 27 февраля 2019

Спасибо за ваш вопрос!

Классы являются первоклассными гражданами в python, поэтому любые манипуляции с ними так же хороши, как и манипуляции с любым другим объектом.Но множественное наследование - довольно неприятная вещь, и, если возможно, ее следует избегать вообще.

Помните об этом:

class A1:
    def __init__(self):
        self.a = 1

class A2:
    def __init__(self):
        self.a = 2

Composed1 = compose(A1, A2)
c1 = Composed1()
print(c1.a)   # prints 2

Composed2 = compose(A2, A1)
c2 = Composed2()
print(c2.a)   # prints 1

И это самое очевидное предупреждение.Есть много других.

Будьте предупреждены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...