我想扩展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
我做错了什么?
提前致谢!
答案 0 :(得分:1)
您似乎正在尝试扩展工厂调用MonkeyDevice
返回的waitForConnection
实例。
当您尝试在construtor中替换self
时,会出现错误(?)。
我怀疑你正在运行Jython,因为CPython不会在这里抱怨,而是创建了局部变量self
并且它的值丢失了。
无论如何要实现你想要的,你应该创建一个自定义__new__
而不是__init__
的类,从工厂获取你的MonkeyDevice
实例并将你的东西注入实例或它的类/碱/等
或者,您可以将MonkeyDevice
包装到另一个类中,并通过__getattr__
和__setattr__
传递monkey-ish调用和成员访问权。
答案 1 :(得分:1)
如果没有调用工厂函数MonkeyDevice
,您似乎无法直接初始化waitForConnection
实例。因此,您需要在self
函数中指定__new__()
,以便MonkeyDevice
在您调用IMonkeyDevice
__init__
示例:
class TestDevice(MonkeyDevice):
def __new__(self, serial=None):
return MonkeyRunner.waitForConnection(deviceId=serial)
def __init__(self):
MonkeyDevice.__init__(self)