创建子类而不直接访问父类__init __()函数

时间:2018-01-24 12:46:32

标签: python class inheritance dronekit-python dronekit

我使用Python中的DroneKit API来使用配套计算机控制无人机。我试图创建一个类,它继承自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 = connect(stuff),最终返回一个Vehicle对象,但也会做一堆其他东西。

我能想到的唯一方法是

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

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

我如何使这项工作?

1 个答案:

答案 0 :(得分:2)

定义对象的方式与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)

您的课程将使用connect()

connect(..., vehicle_class=MyVehicle)