Возможно ли иметь альтернативное наследование в python3? - PullRequest
0 голосов
/ 15 октября 2019

Моя цель:

class BaseClass1:
    def f(self)

class BaseClass2:
    def f(self)

class DerivedClass:
    def g(self):
        self.f() # this is either BaseClass1::f() or BaseClass2::f(), depending on instantiation

Где можно указать DerivedClass:

class DerivedClass(BaseClass1)

или

class DerivedClass(BaseClass2)

Я понимаю, что это может решить саму проблему:

class UtilityClass1:
    def f(self)

class UtilityClass2:
    def f(self)

class DerivedClass:
    def __init__(self, utilityInstance):
        self.utility = utilityInstance
    def g(self):
        self.utility.f()

d = DerivedClass(UtilityClass1())
d = DerivedClass(UtilityClass2())

Тем не менее, я специально хочу знать, есть ли другой способ, через наследование (возможно, с использованием некоторых декораторов или чего-то еще).


Просто чтобы обернуть вещи:

ВХОД: 3 определения класса:

class BaseClass1
class BaseClass2
class DerivedClass

ВЫХОД: 2 "объединенный" классэкземпляры:

d1 = DerivedClass(BaseClass1)
d2 = DerivedClass(BaseClass2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...