这里是UML图][2][2]。https:/i.stack.imgur.comjSnIn.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")
如果我的理解没错的话,把Motor(Car)和Camera(Car)中的 "car "去掉,然后把car类改成 "汽车"。
class Car(Motor, Camera)
...
那么Car将继承Motor和Camera的方法和属性,但不会继承 启动 方法。如果需要隔离引用,那么可以将父对象作为子对象实例的属性,反之亦然,然后根据需要调整方法来调用这些属性或引用这些属性。
另一种思路是使用直接调用Camera和Motor的init方法来捕获它们的初始化属性。
class Car(Motor, Camera):
Motor.__init__(self)
Camera.__init__(self)
也可以参考调用父类__init__与多继承,正确的方法是什么?对于super()的使用有很好的描述(就是比我有更多python和计算机经验的人有了答案!)。