2011-09-15 9 views
8

मैं monkeyrunner एपीआई के बंदरडिवाइस कक्षा का विस्तार करना चाहता हूं। मेरी व्युत्पन्न कक्षा इस तरह दिखती है।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 

क्या मैं गलत कर रहा हूँ?

अग्रिम धन्यवाद!

+0

क्या कोड भाषा में यह है: तो बजाय आप ताकि MonkeyDeviceIMonkeyDevice से इनहेरिट के रूप में उदाहरण के पहचानता है इससे पहले कि आप कहते हैं यह __init__

उदाहरण है अपने __new__() समारोह में self आवंटित करने के लिए की आवश्यकता है? – JPM

+0

@ जेपीएम: यह पाइथन –

+1

है, मैंने बंदर का उपयोग नहीं किया है, लेकिन जो मैं देखता हूं उससे ... आप 'स्वयं' को फिर से क्यों सौंप रहे हैं? मेरा मतलब है कि आप मूल बंद कर रहे हैं, 'बंदरदेविस' के निर्माता को जो ठीक है और इसे करने का सही तरीका, तो आप बस उस 'स्वयं' को छोड़ रहे हैं !, क्या यह बंदर के साथ ऐसा करने का सही तरीका है? – cyraxjoe

उत्तर

1

ऐसा प्रतीत होता है कि आप फ़ैक्टरी फ़ंक्शन waitForConnection पर कॉल किए बिना सीधे MonkeyDevice इंस्टेंस प्रारंभ नहीं कर सकते हैं।

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

ऐसा लगता है कि आप फैक्टरी कॉल waitForConnection द्वारा लौटाए गए MonkeyDevice उदाहरण को विस्तारित करने का प्रयास कर रहे हैं।

जब आप कंस्ट्रूटर के अंदर self को प्रतिस्थापित करने का प्रयास करते हैं तो आपको एक त्रुटि (?) मिलती है। मुझे संदेह है कि आप ज्योथन चला रहे हैं, क्योंकि सीपीथन यहां शिकायत नहीं करेगा, इसके बजाय स्थानीय चर self बनाया गया है और इसका मूल्य खो गया है।

वैसे भी प्राप्त करने के लिए आप क्या चाहते हैं आप बल्कि __init__ से कस्टम __new__ के साथ एक वर्ग बनाना चाहिए, कारखाने से अपने MonkeyDevice उदाहरण मिलता है और उदाहरण में अपना सामान इंजेक्षन या यह वर्ग/अड्डों/आदि है।

वैकल्पिक रूप से आप MonkeyDevice को किसी अन्य वर्ग में लपेट सकते हैं और __getattr__ और __setattr__ हालांकि बंदर-आश कॉल और सदस्य पहुंच पास कर सकते हैं।

+0

क्या यह उत्तर कुछ भी करता है? – devin

+0

अच्छी बात, दूसरी नज़र में समस्या अधिक स्पष्ट है, उत्तर को फिर से लिखना। –

संबंधित मुद्दे