如何从MonkeyDeviceinheritance?

我想扩展monkeyrunner API的MonkeyDevice类。 我的派生类看起来像这样。

from com.android.monkeyrunner import MonkeyDevice, MonkeyRunner class TestDevice(MonkeyDevice): def __init__(self, serial=None): MonkeyDevice.__init__(self) self = MonkeyRunner.waitForConnection(deviceId=serial) self.serial = serial 

当我从另一个模块调用test_dev = TestDevice(serial) ,出现以下错误:

  test_dev = TestDevice(serial) TypeError: _new_impl(): 1st arg can't be coerced to com.android.monkeyrunner.core.IMonkeyDevice 

我究竟做错了什么?

提前致谢!

Solutions Collecting From Web of "如何从MonkeyDeviceinheritance?"

看来你不能直接初始化一个MonkeyDevice实例,而不需要调用一个工厂函数waitForConnection 。 因此,您需要在__new__()函数中指定self ,以便MonkeyDevice将实例识别为从IMonkeyDeviceinheritance,然后再调用它的__init__

例:

 class TestDevice(MonkeyDevice): def __new__(self, serial=None): return MonkeyRunner.waitForConnection(deviceId=serial) def __init__(self): MonkeyDevice.__init__(self) 

看来你正试图扩展工厂调用waitForConnection返回的MonkeyDevice实例。

当你试图在build筑师内部取代self ,你会得到一个错误(?)。 我怀疑你正在运行Jython,因为CPython不会在这里抱怨,而是创build一个局部variablesself并且它的值会丢失。

无论如何,要实现你想要的,你应该创build一个类与自定义__new__而不是__init__ ,从工厂得到你的MonkeyDevice实例,并注入你的东西到实例或类/基地/等。

另外,你也可以将MonkeyDevice到另一个类中,通过__getattr____setattr__传递monkey-ish调用和成员访问。