8

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

我究竟做错了什么?

提前致谢!

4

2 回答 2

1

您似乎正在尝试扩展MonkeyDevicefactory call 返回的实例waitForConnection

当您尝试self在构造函数内部进行替换时,您会收到错误(?)。我怀疑您正在运行 Jython,因为 CPython 不会在这里抱怨,而是self创建了一个局部变量并丢失了它的值。

无论如何,要实现您想要的,您应该使用 custom__new__而不是创建一个类,从工厂__init__获取您的MonkeyDevice实例并将您的东西注入实例或它的类/基础/等。

或者,您可以包装到另一个类中,并通过和MonkeyDevice传递猴子式调用和成员访问。__getattr____setattr__

于 2012-02-23T09:33:56.363 回答
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)
于 2013-01-25T07:55:18.230 回答