Вопрос по python, inheritance – Как выполнить частичное наследование
У меня есть два класса, например:
class Parent(object):
def hello(self):
print 'Hello world'
def goodbye(self):
print 'Goodbye world'
class Child(Parent):
pass
Класс Child должен наследовать только метод hello () от Parent, и о goodbye () упоминаться не должно. Является ли это возможным ?
да я читаюэтот
Важное примечание: и я могу изменять только дочерний класс (в родительском классе все возможные должны быть оставлены как есть)
Решение зависит от того, почему вы хотите это сделать. Если вы хотите быть в безопасности от ошибочного использования класса в будущем, я сделаю следующее:
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()
Прямой простой ответ:
class P(object):
def hello(self): print 'hello'
def goodbye(self): print 'goodbye'
class C(P): pass
del C.goodbye
Этот пример Python показывает, как проектировать классы для достижения наследования дочерних классов:
class HelloParent(object):
def hello(self):
print 'Hello world'
class Parent(HelloParent):
def goodbye(self):
print 'Goodbye world'
class Child(HelloParent):
pass
class Child(Parent):
def __getattribute__(self, attr):
if attr == 'goodbye':
raise AttributeError()
return super(Child, self).__getattribute__(attr)