在不直接访问父类 __init__() 函数的情况下创建子类



我正在使用Python中的DroneKit API来控制使用配套计算机的无人机。我正在尝试创建一个类 Vehicle,它继承自 DroneKit 中的 Vehicle 类。这个类的目的是让我覆盖 DroneKit 中存在的一些不适用于 PX4 的方法,并添加一些我自己的方法,同时仍然可以访问默认情况下可用的所有方法。

问题是你没有直接使用 Dronekit 创建一个 Vehicle 对象——你调用 connect() 函数来返回一个 Vehicle 对象。

我的问题是,如何创建类的实例?

接受的方法似乎是调用父init(),如下所示:

class Vehicle(dronekit_Vehicle):
def __init__(self, stuff):
dronekit_Vehicle.__init__(stuff)

但就像我说的,你不会直接在 Dronekit 中创建一个 Vehicle 对象,例如 Vehicle = Vehicle(stuff),而是通过 Vehicle = connect(stuff),它最终返回一个 Vehicle 对象,但也做了一堆其他事情。

我能想到的唯一方法是

class Vehicle(dronekit_Vehicle):
def __init__(self, stuff):
self.vehicle = connect(stuff)

然后必须使用 self.vehicle.function() 来访问默认的 DroneKit 命令和属性,这是一个巨大的痛苦。

我该如何完成这项工作?

对象的定义方式与connect无关。调用connect只是一些方便的函数,它围绕对象创建包装了一些逻辑:

def connect(...):
handler = MAVConnection(...)
return Vehicle(handler)

Vehicle.__init__()被定义为

def __init__(self, handler):
super(Vehicle, self).__init__()
self._handler = handler
...

因此,只要您在构造函数中传递处理程序:

class MyVehicle(dronekit.Vehicle):
def __init__(self, handler):
super(MyVehicle, self).__init__(handler)

您的班级将使用connect()

connect(..., vehicle_class=MyVehicle)

最新更新