Сделайте Der2
подклассом Der1
, и все готово.
class Base:
def Foo(self):
pass
# First derived class
class Der1(Base):
def OwnFoo(self):
# Do something 1
def OwnFoo2(self):
# Do something 2
def Foo(self):
# Do something 3
# Second derived class (subclasses Der1)
class Der2(Der1):
pass
Любое поведение в пределах Der2
, которое вы хотели бы специализировать, может быть добавлено в определение класса.Если вы создадите новый метод с тем же именем в Der2
(например, Der2.OwnFoo()
), он перегрузит метод по умолчанию, унаследованный от Der1
.
РЕДАКТИРОВАТЬ: Если вы не можете изменить родителя, поместите все поведение, которое вы хотите унаследовать, в базовый класс, имея в виду, что вы можете перегрузить или настроить любой из методов в подклассах.
В коде:
# Base class
class Base:
def Foo1(self):
# Do something 1
def Foo2(self):
# Do something 2
def Foo(self):
# Do something 3
# First derived class, inherits everything from Base
class Der1(Base):
pass
# Second derived class
class Der2(Base):
pass
Существует "хитрость", которую вы можете сделать, чтобы вызвать оригинальный метод, унаследованный от родительского объекта, захватить возвращаемое значение и затем настроить поведение.Это будет работать только в том случае, если метод на самом деле возвращает значение, и может быть опасно, если метод манипулирует атрибутами в классе, если это не то, что вы хотите и ожидаете.
В коде:
# Second derived class, with customized methods
class Der2(Base):
# Anything that is not explicitly define is inherited from parent
# as-is.
def Foo(self):
# My Foo() overloads Base.Foo() inherited from parent class.
# Do something "special" 3
def Foo1(self):
# Calls parent Base.Foo1() and then manipulates return data.
base_output = Base.Foo1(self)
# Do something "special" 1 with 'base_output'