Skip to main content
 首页 » 编程设计

python之关于python和类的问题

2025年05月04日13wuhuacong

我有一个基类和一些用 Python 派生的类:

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 
class Der2(Base): 
   def OwnFoo(self): 
      # Do something 1 
   def OwnFoo2(self): 
      # Do something 2 
 
   def Foo(self): 
      # Do something 3 

问题是:

我在 Der1 中有一些预定义代码。 Der2 中的几乎所有函数都执行相同的操作。我怎样才能用更少的代码写这个?

我无法将该代码添加到父级。不应触及父类。

例如,Der2.OwnFoo 与 Der1.OwnFoo 的作用相同,也许 python 中有一些构造只是为了从中调用 OwnFoo头等舱而不是再次编写该代码?


我无法更改 Der1 和 Der2 的父级!它应该是 Base。

请您参考如下方法:

由于您无法更改继承结构,因此制作一个包含公共(public)代码的辅助类并通过composition 包含它。而不是继承。

# Common code goes in this new class 
class DerHelper: 
    def __init__(self, parent): 
        self._parent = parent 
    def OwnFoo(self): 
        print 'Do something 1', self._parent 
    def OwnFoo2(self): 
        print 'Do something 2', self._parent 
    def Foo(self): 
        print 'Do something 3', self._parent 
 
# First derived class 
class Der1(Base): 
    def __init__(self): 
        # include helper class by composition 
        self._helper = DerHelper('Der1') 
    def OwnFoo(self): 
        self._helper.OwnFoo() 
    def OwnFoo2(self): 
        self._helper.OwnFoo2() 
    def Foo(self): 
        self._helper.Foo() 
 
# Second derived class 
class Der2(Base): 
    def __init__(self): 
        # include helper class by composition 
        self._helper = DerHelper('Der2') 
    def OwnFoo(self): 
        self._helper.OwnFoo() 
    def OwnFoo2(self): 
        self._helper.OwnFoo2() 
    def Foo(self): 
        self._helper.Foo() 

当然,您可以传递对父级的引用而不是字符串。我这样做只是为了演示目的。

用法:

d = Der1() 
d.OwnFoo() 
d.OwnFoo2() 
d.Foo() 
 
d = Der2() 
d.OwnFoo() 
d.OwnFoo2() 
d.Foo() 

输出:

Do something 1 Der1 
Do something 2 Der1 
Do something 3 Der1 
Do something 1 Der2 
Do something 2 Der2 
Do something 3 Der2