Мне нужна структура композиции класса Python 3 с наследованием классов.Как мне это сделать? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь включить некоторые объекты в родительский класс, но эти объекты должны иметь возможность доступа к методам и атрибутам родительского класса.

Проблема в том, что у меня есть имеет отношение вместо отношения is-a .Обычно это предполагает составную структуру, но составление затрудняет доступ к методам и атрибутам объекта родительского класса.

У меня есть этот пример кода, чтобы проиллюстрировать, что мне нужно:

class Body:
    def __init__(self):
        self.head_obj = Head() # << head_obj is now part of Body object
        # ...Set-up body...

    def body_actions(self):
        print('Body does something')

    def common_method(self):
        print('Body does something Head can do') # << Head needs this method

class Head:
    def __init__(self):
        # ...Set-up head...

    def head_actions(self):
        print('Head does something')
        Body.common_method() # <<This call does not work without inheritance

ВВ приведенном выше коде объект Head должен быть создан с помощью Body, а объект Head должен иметь доступ к методам в Body.Это подразумевает некое гибридное наследование и композиционную структуру, но я не могу понять это.

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете сделать эту работу, передав текущий экземпляр Body в Head:

class Body:
    def __init__(self):
        self.head_obj = Head(self)

...

class Head:
    def __init__(self, body_obj):
        self.body_obj = body_obj

    def head_actions(self):
        print('Head does something')
        self.body_obj.common_method() 

Но на самом деле я думаю, что вы должны переосмыслить свой дизайн.Это добавляет большое количество связей между двумя классами и делает его очень запутанным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...