Python可以实现部分继承吗?

26 投票
4 回答
15536 浏览
提问于 2025-04-16 15:38

我正在用Python创建一个类(class0),这个类目前是基于另一个类(class1)来做的;不过,我还想从另一个类(class2)继承一些东西。关于class2,我并不想要它所有的方法和属性,我只需要其中的一个方法。请问class0可以只从class2继承一个方法吗?

4 个回答

6

为什么不使用组合呢?让你的类保持对想要的对象的引用,然后把工作交给它来做。

15

一种方法是使用“混合”的方式:

class Mixin(object):
    def method(self):
        pass

class C1(Mixin, ...parents...):
    pass

class C2(Mixin, ...parents...):
    pass

另一种方法是组合:

class C1(object):
    def method(self):
        pass

class C2(object):
    def __init__(self):
        self.c1 = C1()

    def method(self):
        return self.c1.method()
27

在这种情况下,使用“混入”方法,也就是创建一个只实现你想要的方法的类,是正确的做法。不过为了完整起见,既然这正好回答了你的问题,我想补充一下,确实可以实现你想要的类似“部分继承”的行为(不过要注意,这个概念在正式的定义中并不存在)。

你需要做的就是在新类中添加一个成员,指向你想要重复的方法或属性:

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()

需要注意的是,在Python 2.x(直到2.7)中,从类的__dict__中获取方法是必要的,因为在运行时会进行一些转换,把函数变成方法。而在Python 3.0及以上版本中,只需要将这一行改成

method = Class2.__dict__["method"]

就可以了。

method = Class2.method

撰写回答