मैं टेलनेट के माध्यम से एक प्रयोगशाला उपकरण से कनेक्ट करने की कोशिश कर रहा हूं।पायथन - पुरानी शैली के वर्गों से विरासत
import telnetlib
class Instrument(telnetlib.Telnet):
def __init__(self, host=None, port=0, timeout=5):
super(Instrument,self).__init__(host, port, timeout)
सभी मैं इस कोड में करने के लिए कोशिश कर रहा हूँ माता पिता से __init__
विधि के वारिस है: मैं मानक पुस्तकालय में telnetlib
मॉड्यूल से Telnet
वर्ग का विस्तार करने, हमारे साधन करने के लिए विशेष कार्य शामिल करना चाहते हैं कक्षा (telnetlib.Telnet
) और मानक तर्कों को पारित करें, इसलिए मैं बाद में __init__
पर चीज़ें जोड़ सकता हूं। इस सूत्र ने अन्य अवसरों पर मेरे लिए काम किया है; इस बार यह मुझे super()
बयान पर एक त्रुटि देता है जब मैं का दृष्टांत का प्रयास करें:
TypeError: must be type, not classobj
मैं telnetlib के लिए स्रोत कोड को देखा, और टेलनेट एक पुरानी शैली वर्ग प्रतीत होता है (यह से विरासत नहीं है object
) - मुझे आश्चर्य है कि यह मेरी समस्या का स्रोत हो सकता है? यदि हां, तो इसे कैसे दूर किया जा सकता है? मैंने कुछ कोड उदाहरण देखे हैं जहां व्युत्पन्न वर्ग सुपरक्लास और object
दोनों से विरासत में मिलता है, हालांकि मुझे पूरी तरह से यकीन नहीं है कि यह मेरे जैसा ही समस्या है।
पूर्ण प्रकटीकरण: मैं भी super()
के स्थान पर telnetlib.Telnet
का उपयोग कर from telnetlib import Telnet
Telnet
साथ super()
के स्थान पर की कोशिश की है, और। इन मामलों में समस्या बनी हुई है।
धन्यवाद!
मैंने कोशिश की है - यह मुझे त्रुटि देता है: 'TypeError: अनबाउंड विधि __init __() को टेलनेट इंस्टेंस के साथ पहली तर्क के रूप में बुलाया जाना चाहिए (इसके बजाय str instance मिला) ' –
कृपया सही कोड और त्रुटि जो आपको मिलती है कोड जो मैंने अभी पोस्ट किया है। क्योंकि वास्तव में यह किया जाता है कि यदि आप पुराने शैली के क्लास के अभिभावक कन्स्ट्रक्टर को कॉल करना चाहते हैं तो यह कैसे किया जाता है। – ThiefMaster
आह, मैंने आपके कोड और खान के बीच अंतर देखा है - आपके पास '__init__' के पहले तर्क के रूप में 'स्वयं' था। यह अब काम करता है - इतनी जल्दी जवाब देने के लिए धन्यवाद! क्या आप मुझे समझा सकेंगे कि आपको कन्स्ट्रक्टर को पहला तर्क क्यों 'आत्म' देने की आवश्यकता है? मैं पाइथन के लिए नया हूँ। –