Я работаю с двумя классами в Python, одним из которых должно быть разрешено иметь какие-либо объекты из другого класса в качестве дочерних, сохраняя при этом инвентаризацию этих детей в качестве атрибута. Наследование казалось очевидным выбором для этой родительской < > детской ситуации, но вместо этого я стал примером композиции. Вот упрощенный код:
class Parent():
def __init__(self,firstname,lastname):
self.firstname = firstname
self.lastname = lastname
self.kids = []
def havechild(self,firstname):
print self.firstname,"is having a child"
self.kids.append(Child(self,firstname))
class Child(Parent):
def __init__(self,parent,firstname):
self.parent = parent
self.firstname = firstname
self.lastname = parent.lastname
Итак, в основном, хотя кажется, что интуитивно понятно, что Child() наследует от Parent(), удаляя наследование, ничего не меняет. Единственное преимущество, которое я могу видеть для выхода из Child (Parent), а не только для класса Child(), было бы, если бы мне нужно было добавить намного больше методов для родителя, чтобы я хотел, чтобы Child наследовал. Используя self.parent = parent, у меня уже есть доступ к любым дополнительным атрибутам будущего родителя.
Есть ли другой способ использовать чистое наследование, а не передавать родительский экземпляр в конструктор (композицию) Child?