Я создаю класс (класс0) в Python, который в настоящее время основан на одном классе (class1); однако, я хотел бы наследовать и от другого класса (класс2). Дело в классе2 заключается в том, что я не хочу всех его методов и атрибутов, мне нужен только один метод. Возможно ли, чтобы класс0 наследовал только один метод из класса2?
Возможно ли частичное наследование с Python?
Ответ 1
Метод "mixin" с другим классом, который просто реализует метод, который вы хотите, является правильной вещью в этом случае. Но для полноты, поскольку он отвечает именно на то, что вы просите, я добавляю, что да, возможно иметь такое же поведение, как и "частичное наследование", которое вы хотите (но обратите внимание, что такой вещи не существует).
Все, что нужно сделать, это добавить элемент в новый класс, ссылающийся на метод или атрибут, который вы хотите повторить там:
class Class2(object):
def method(self):
print ("I am method at %s" % self.__class__)
class Class1(object):
pass
class Class0(Class1):
method = Class2.__dict__["method"]
ob = Class0()
ob.method()
Обратите внимание, что получение метода из класса __dict__
необходимо в Python 2.x(до 2.7) - из-за преобразований времени выполнения, которые сделаны для преобразования функции в метод. В Python 3.0 и выше просто измените строку
method = Class2.__dict__["method"]
к
method = Class2.method
Ответ 2
Один путь заключается в использовании подхода "mixin":
class Mixin(object):
def method(self):
pass
class C1(Mixin, ...parents...):
pass
class C2(Mixin, ...parents...):
pass
Другим способом является композиция:
class C1(object):
def method(self):
pass
class C2(object):
def __init__(self):
self.c1 = C1()
def method(self):
return self.c1.method()
Ответ 3
Почему бы вам не использовать композицию? Попросите свой класс сохранить ссылку на нужный объект и делегировать ему.
Ответ 4
создайте другой базовый класс, реализующий этот метод, и сделайте class2 и class1 как наследующим этот класс