我在Python中创建一个类(class0),它目前基于一个类(class1);但是,我也希望从另一个类继承(class2)。关于class2的事情是我不想要它的所有方法和属性,我只需要一个方法。 class0是否可以仅从class2继承单个方法?
答案 0 :(得分:14)
在这种情况下,让另一个只实现你想要的方法的类的“mixin”方法是正确的。 但为了完整起见,因为它完全回答了你的要求,我补充说是的,有可能像你想要的“部分继承”一样行为(但请注意,这样的概念并不是正式存在的)。 / p>
所有人必须做的是在新类上添加引用您希望在那里重复的方法或属性的成员:
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
答案 1 :(得分:12)
一种方法是使用'mixin'方法:
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()
答案 2 :(得分:6)
为什么不使用作文?让您的班级保留对所需对象的引用,并委托给它。
答案 3 :(得分:3)
创建另一个实现这个方法的基类,并使class2和class1都继承这个类