Python 多种组合以扩展接口功能

Python 多种组合以扩展接口功能,python,inheritance,interface,software-design,composition,Python,Inheritance,Interface,Software Design,Composition,我有一个定义一些核心API的接口,如下所示: 类核心接口: def核心功能(自身): 通过 我还有一些接口可以向核心添加额外的API,如: B类接口(核心接口): def b_func(self,*args): 通过 C类接口(核心接口): def c_func_1(自身): 通过 def c_func_2(自身): 通过 最后,我有一个实现这些接口的类,如下所示: 类MyClass(B_接口、C_接口): def核心功能(自身): 返回“core_func” def b_func(self

我有一个定义一些核心API的接口,如下所示:

类核心接口:
def核心功能(自身):
通过
我还有一些接口可以向核心添加额外的API,如:

B类接口(核心接口):
def b_func(self,*args):
通过
C类接口(核心接口):
def c_func_1(自身):
通过
def c_func_2(自身):
通过
最后,我有一个实现这些接口的类,如下所示:

类MyClass(B_接口、C_接口):
def核心功能(自身):
返回“core_func”
def b_func(self,*args):
返回“b_func”
def c_func_1(自身):
返回'c_func_1'
def c_func_2(自身):
返回'c_func_2'
到目前为止相当简单

现在,我想添加一些组合特性,因为我不想在多重继承中遇到菱形问题。因此,我为B和C接口创建包装,如下所示:

B类接口包装器:
定义初始(自我,对象):
self.obj=obj
def核心功能(自身):
retval=self.obj.core_func()
修改的_retval=self.obj.b_func(retval)
返回修改的返回值
类C_接口_包装器:
定义初始(自我,对象):
self.obj=obj
def核心功能(自身):
retval=self.obj.core_func()
retval1=self.obj.c_func_1()
retval2=self.obj.c_func_2()
返回retval,retval1,retval2
就个人而言,一切都按预期进行。我可以用B-Wrapper或C-Wrapper包装MyClass对象,一切按预期进行。但是,现在我想要一个对象同时具有来自B和C的两个特性,因此我将这两个特性都包装起来,并得到以下错误:

>>> bc_obj = B_Interface_Wrapper(C_Interface_Wrapper(obj))
>>> bc_obj.core_func()

  File "test_script.py", line 61, in <module>
    bc_obj.core_func()
  File "test_script.py", line 25, in core_func
    modified_retval = self.obj.b_func(retval)
AttributeError: 'C_Interface_Wrapper' object has no attribute 'b_func'
bc_obj=B_接口_包装器(C_接口_包装器(obj)) >>>bc_obj.core_func() 文件“test_script.py”,第61行,在 bc_obj.core_func() 核心函数中第25行的文件“test_script.py” 修改的_retval=self.obj.b_func(retval) AttributeError:'C_Interface_Wrapper'对象没有属性'b_func' 同样,如果我尝试用另一种方式包装它

>>> bc_obj = C_Interface_Wrapper(B_Interface_Wrapper(obj))
>>> bc_obj.core_func()

  File "test_script.py", line 62, in <module>
    bc_obj.core_func()
  File "test_script.py", line 34, in core_func
    retval1 = self.obj.c_func_1()
AttributeError: 'B_Interface_Wrapper' object has no attribute 'c_func_1'
bc_obj=C_接口包装(B_接口包装(obj)) >>>bc_obj.core_func() 文件“test_script.py”,第62行,在 bc_obj.core_func() 核心函数中第34行的文件“test_script.py” retval1=self.obj.c_func_1() AttributeError:'B_Interface_Wrapper'对象没有属性'c_func_1' 我可以理解为什么会出现这种错误,但我仍然面临设计挑战。我认为有一些变通方法有点不成熟,所以我想知道我的设计是否存在根本性的缺陷。使用组合来扩展/修改这样的功能是一种不好的做法吗