开发者

How to inherit from MonkeyDevice?

开发者 https://www.devze.com 2023-04-04 22:48 出处:网络
I would like to extend the MonkeyDevice class of the monkeyrunner API. My derived class looks like this.

I would like to extend the MonkeyDevice class of the monkeyrunner API. My derived class looks like this.

f开发者_如何学Gorom 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

When I call test_dev = TestDevice(serial) from another module I get the following error:

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

What am I doing wrong?

Thanks in advance!


It appears you cannot directly initialize a MonkeyDevice instance without a call to a factory function waitForConnection. So instead you need to assign self in your __new__() function so that MonkeyDevice recognizes the instance as inheriting from IMonkeyDevice before you call it's __init__

Example:

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


It seems you are trying to extend a MonkeyDevice instance returned by factory call waitForConnection.

When you try to substitute self inside the construtor you get an error (?). I suspect you are running Jython, as CPython would not complain here, instead a local variable self is created and its value lost.

Anyway to achieve what you want you should create a class with custom __new__ rather than __init__, get your MonkeyDevice instance from the factory and inject your stuff into the instance or it's class/bases/etc.

Alternatively you could wrap MonkeyDevice into another class and pass monkey-ish calls and member access though __getattr__ and __setattr__.

0

精彩评论

暂无评论...
验证码 换一张
取 消