python - 如何在 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")
解决方案
如果我理解正确,请从 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 和计算机经验!)。
推荐阅读
- ios - 为什么在创建领域数据模型时需要必需的初始化程序?
- netsuite - Netsuite:使用套件脚本在项目子列表上添加自定义列
- haskell - foldl' 和 foldr' 的默认定义看起来很奇怪
- android - 由 java.lang.IllegalStateException 引起:无法为分离的片段创建 ViewModelProvider
- ios - Firebase MLKit 文本识别错误
- arrays - 如何将过滤器应用于以下代码?
- java - 在eclipse中使用java以编程方式启动appium服务器时花费太多时间
- ios - UIPopoverPresentationController 显示为全窗口弹出窗口
- php - WordPress分页无法显示相同的帖子集
- sql-server - “AT TIME ZONE”替代 SQL Server 2014 或更早版本的 SQL Server