Моя цель:
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)