Python可以实现部分继承吗?
我正在用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