是否可以使用Python进行部分继承?

rec*_*gle 18 python inheritance class

我正在Python中创建一个类(class0),它目前基于一个类(class1); 但是,我也希望从另一个类继承(class2).关于class2的事情是我不想要它的所有方法和属性,我只需要一个方法.class0是否可以仅从class2继承单个方法?

jsb*_*eno 16

在这种情况下,让另一个只实现你想要的方法的类的"mixin"方法是正确的.但是为了完整起见,因为它完全回答了你的要求,我补充说是的,有可能像你想要的"部分继承"一样行为(但请注意,这样的概念并不是正式存在的).

所有人必须做的是在新类上添加引用您希望在那里重复的方法或属性的成员:

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()
Run Code Online (Sandbox Code Playgroud)

请注意,__dict__在Python 2.x(最多2.7)中需要从类中检索方法- 由于在方法中转换函数所做的运行时转换.在Python 3.0及更高版本中,只需更改行即可

method = Class2.__dict__["method"]
Run Code Online (Sandbox Code Playgroud)

method = Class2.method
Run Code Online (Sandbox Code Playgroud)


zin*_*del 12

一条路是使用'mixin'方法:

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

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

class C2(Mixin, ...parents...):
    pass
Run Code Online (Sandbox Code Playgroud)

另一种方式是组成:

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

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

    def method(self):
        return self.c1.method()
Run Code Online (Sandbox Code Playgroud)


Geo*_*Geo 6

为什么不使用构图?让您的班级保留对所需对象的引用,并委托给它.