Как я могу создать такую ​​связь между этими классами в python? - PullRequest
0 голосов
/ 29 апреля 2020

[Вот диаграмма UML] [2] [2]: https://i.stack.imgur.com/jSnIn.png

Я хочу написать программу python для реализации этой диаграммы. Я создал пакет под названием CarPackage, и внутри него я поместил эти 3 класса (Автомобиль, Мотор, Камера). Я не знаю точно, как связать классы вместе, синтаксис python доставляет мне проблемы .. Я искал по inte rnet, но не смог найти ничего полезного.

Это мой код до сих пор:

class Car:
    Motor = []
    def __init__(self, Motor,  Camera):
        self.__Motor = Motor # private attribute
        self.__Camera = Camera()  # private attribute

        def move_forward(self):
            print("Moving forward")

        def move_backward(self):
            print("Moving backward")

        def stop(self):
            print("The car has stopped")

        def take_picture(self):
            print("Taking picture...")```




from CarPackage import Car

class Camera(Car):
    resolution_X = int
    resolution_Y = int
    rotation = int

    def __init__(self, resolution_X, resolution_Y, rotation):
        self.__X = resolution_X
        self.__Y = resolution_Y
        self.__rot = rotation

    def take_picture(fileName):
        print("Taking picture...")




from CarPackage import Car

class Motor(Car):
    forward_pin = int
    backward_pin = int

    def __init__(self, forward_pin, backward_pin):
        self.__forward = forward_pin  # private attribute
        self.__backward = backward_pin  # private attribute

    def move_forward(self):
        print("Moving forward")

    def move_backward(self):
        print("Moving backward")

    def stop(self):
        print("The car has stopped")



1 Ответ

0 голосов
/ 29 апреля 2020

Если я правильно понимаю, удалите 'car' из Motor (Car) и Camera (Car), затем измените класс автомобиля на

class Car(Motor, Camera)
...

Тогда Car наследует методы и атрибуты Motor и Camera, но не метод init . Если важно изолировать ссылки, вы можете сделать родительский объект атрибутом экземпляра дочернего объекта и наоборот, а затем настроить методы так, чтобы вызывать эти атрибуты или ссылаться на эти атрибуты по мере необходимости.

Другой Идея заключается в использовании прямого вызова метода init для Camera и Motor для захвата их инициализированных атрибутов.

class Car(Motor, Camera):
    Motor.__init__(self)
    Camera.__init__(self)

Также см. Вызов родительского класса __init__ с множественным наследованием, каков правильный путь? для хорошее описание использования super () (то есть, кто-то с python и опытом работы на компьютере, чем у меня был ответ!).

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