如何从MonkeyDevice继承?

时间:2011-09-15 15:30:20

标签: android python inheritance monkeyrunner

我想扩展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

我做错了什么?

提前致谢!

2 个答案:

答案 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)