У меня проблемы с поиском эффективного решения проблемы наследования Python.
Итак, существует некоторый код вроде следующего:
class Foo( object ):
def __init__():
self.some_vars
def foo_func():
x = Bar()
def foo_bar_func()
x += 1
class Fighters( Foo ):
def __init__():
Foo.__init__()
def func1():
Foo.some_attribute
def func2():
Foo.someother_func()
class Bar():
def bar_func():
#some stuff here
Проблема в том, что мне нужно переопределить Bar.bar_func()
, но это два уровня глубины. Я решил это, выполнив следующие действия:
class Foo( Foo ):
def __init__():
Foo.__init__()
def foo_func(): #Overridden method
x = myBar()
class myFighters( Foo ):
def __init__():
Foo.__init__()
def func1():
Foo.some_attribute
def func2():
Foo.someother_func()
class myBar():
def bar_func(): #the function that I actually need to change
#my sweet code here
Единственное, что на самом деле отличается, - это myBar.bar_func()
, но мне пришлось сделать как минимум 2 вещи, которые я считаю некрасивыми.
Во-первых, мне пришлось создать class Foo
, унаследованный от Foo
. Это кажется странным делом, и оно не дает ясности. Я сделал это, чтобы избавить меня от необходимости переименовывать каждую ссылку в myFighters
с Foo
на myFoo
.
Во-вторых, мне нужно скопировать весь код из Fighters
в myFighters
с единственной целью - использовать замещающую функцию в Bar()
. Fighters
и myFighters
абсолютно одинаковы, за исключением того, что Fighters
использует Foo
, который вызывает Bar()
, а myFighters
использует Foo
, который вызывает myBar()
. Есть ли у кого-нибудь предложения по исправлению этих двух проблем? Или я должен просто быть благодарным, что нашел решение и продолжил свою жизнь ...