首页 > 解决方案 > 如何在 python 中的这些类之间创建这样的关联?

问题描述

[这里是UML图][2][2]:https ://i.stack.imgur.com/jSnIn.png

我想写一个python程序来实现这个图。我创建了一个名为 CarPackage 的包,并在其中放置了这 3 个类(汽车、电机、相机)。我不知道如何将类链接在一起,python sintax给我带来了麻烦。我在互联网上搜索过,但找不到任何有用的东西。

到目前为止,这是我的代码:

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")



标签: pythonpycharm

解决方案


如果我理解正确,请从 Motor(Car) 和 Camera(Car) 中删除“car”,然后将 car class 更改为

class Car(Motor, Camera)
...

那么 Car 会继承 Motor 和 Camera 的方法和属性,但不会继承init方法。如果隔离引用很重要,那么您可以使父对象成为子实例的属性,反之亦然,然后调整方法以调用这些属性或根据需要引用这些属性。

另一种思路是直接调用Camera和Motor的init方法来捕捉它们的初始化属性。

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

另请参阅 使用多重继承调用父类__init__,正确的方法是什么? 很好地描述了使用 super() (也就是说,比我有答案的人有更多的 python 和计算机经验!)。


推荐阅读