Ответ 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