簡體   English   中英

如何從MonkeyDevice繼承?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM