[英]How to inherit from MonkeyDevice?
我想擴展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
我究竟做錯了什么?
提前致謝!
看來,如果不調用工廠函數waitForConnection
就無法直接初始化MonkeyDevice
實例。 因此,相反,您需要在__new__()
函數中分配self
,以便MonkeyDevice
在將該實例稱為__init__
之前將其識別為是從IMonkeyDevice
繼承的實例。
例:
class TestDevice(MonkeyDevice):
def __new__(self, serial=None):
return MonkeyRunner.waitForConnection(deviceId=serial)
def __init__(self):
MonkeyDevice.__init__(self)
似乎您正在嘗試擴展工廠調用waitForConnection
返回的MonkeyDevice
實例。
當您嘗試在構造函數內部替換self
,您將得到一個錯誤(?)。 我懷疑您正在運行Jython,因為CPython不會在這里抱怨,而是創建了一個局部變量self
,並且其值丟失了。
無論如何要實現您想要的目標,您都應該使用自定義__new__
而不是__init__
創建一個類,從工廠獲取MonkeyDevice
實例,然后將您的東西注入該實例或它的class / bases / etc中。
或者,您可以將MonkeyDevice
包裝到另一個類中,並通過__getattr__
和__setattr__
傳遞猴子式的調用和成員訪問權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.