创建子 class 而不直接访问父 class __init__() 函数

Creating a subclass without direct access to the parent class __init__() function

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

问题是您没有直接使用 Dronekit 创建 Vehicle 对象——您调用了 connect() 函数,return 一个 Vehicle 对象。

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

接受的方法似乎是调用父init(),像这样:

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

但是就像我说的,您不能直接在 Dronekit 中创建 Vehicle 对象,例如vehicle = Vehicle(stuff),但是通过 vehicle = connect(stuff),它最终 return 是一个 Vehicle 对象,但也做了很多其他事情。

我能想到的唯一办法就是

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

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

我该如何进行这项工作?

对象的定义方式与connect无关。调用 connectmerely some convenience function that wraps some logic around the object creation:

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

Vehicle.__init__() being defined as

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

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

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

您的 class 将适用于 connect():

connect(..., vehicle_class=MyVehicle)