我有两个课程,例如:
class Parent(object):
def hello(self):
print 'Hello world'
def goodbye(self):
print 'Goodbye world'
class Child(Parent):
pass
class Child必须只从Parent继承hello()方法,并且不应该提及goodbye()。 有可能吗?
ps是的,我读过this
重要说明:我只能修改Child类(在所有可能的父类中应保留原样)
答案 0 :(得分:12)
解决方案取决于您为什么要这样做。如果你想避免将来错误地使用课程,我会这样做:
class Parent(object):
def hello(self):
print 'Hello world'
def goodbye(self):
print 'Goodbye world'
class Child(Parent):
def goodbye(self):
raise NotImplementedError
这是明确的,您可以在异常消息中包含说明。
如果您不想使用父类中的许多方法,那么更好的方式是使用组合而不是继承:
class Parent(object):
def hello(self):
print 'Hello world'
def goodbye(self):
print 'Goodbye world'
class Child:
def __init__(self):
self.buddy = Parent()
def hello(self):
return self.buddy.hello()
答案 1 :(得分:2)
class Child(Parent):
def __getattribute__(self, attr):
if attr == 'goodbye':
raise AttributeError()
return super(Child, self).__getattribute__(attr)
答案 2 :(得分:0)
此Python示例演示如何设计类以实现子类继承:
class HelloParent(object):
def hello(self):
print 'Hello world'
class Parent(HelloParent):
def goodbye(self):
print 'Goodbye world'
class Child(HelloParent):
pass
答案 3 :(得分:-2)
直接简单的答案是:
class P(object):
def hello(self): print 'hello'
def goodbye(self): print 'goodbye'
class C(P): pass
del C.goodbye