TypeError: मॉड्यूल .__ init __ () सबसे अधिक 2 तर्क (3 दिए गए) लेता है


147

मैंने नाम की एक फ़ाइल में एक वर्ग को परिभाषित किया है Object.py। जब मैं किसी अन्य फ़ाइल में इस वर्ग से इनहेरिट करने का प्रयास करता हूं, तो कॉलिंग कंस्ट्रक्टर अपवाद छोड़ देता है:

TypeError: module.__init__() takes at most 2 arguments (3 given)

यह मेरा कोड है:

import Object

class Visitor(Object):
    pass

instance = Visitor()  # this line throws the exception

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


1
क्या आप कृपया दिए गए उत्तर का चयन कर सकते हैं? यह सही प्रतीत होता है और अन्य प्रश्नों को आप के द्वंद्व के रूप में बंद करने की अनुमति देगा।
मैड

1
हे @wakamdr डुप्लिकेट प्रश्न कार्यक्षमता बहुत उपयोगी है। क्या कोई कारण है कि मेरा उत्तर सही नहीं है?
शीना

एक उत्तर को अन्य प्रश्नों के लिए स्वीकार करने की आवश्यकता नहीं है, क्योंकि इसे एक के डुप्लिकेट के रूप में बंद किया जा सकता है।
user2357112

जवाबों:


237

आपकी त्रुटि हो रही है क्योंकि Objectएक मॉड्यूल है, एक वर्ग नहीं है। तो आपकी विरासत पेचीदा है।

अपना आयात विवरण बदलें:

from Object import ClassName

और आपकी कक्षा की परिभाषा:

class Visitor(ClassName):

या

अपनी वर्ग परिभाषा बदलें:

class Visitor(Object.ClassName):
   etc

अगर यह एक ही ClassNameपूरी तरह से छोड़ देता है, तो यह उसी तरह काम करता है ? पसंद है class Visitor()?
VMAtm

1
@VMAtm: क्यों न आप इसे आजमाएँ और पता करें। पायथन के महान कॉस में दुभाषिया है। त्वरित प्रयोग के लिए महान
शीना

2
प्रतिभा। दुनिया में सबसे खराब त्रुटि रेखा। मुझे यह पता लगाने में 3 घंटे लगे कि मैं मॉड्यूल का उपयोग कर रहा था और कक्षा का नहीं। # $% ^ $% और $% &
मिकी पेर्लस्टीन

जावा उपयोगकर्ताओं के लिए इसे और अधिक स्पष्ट करने के लिए, फ़ाइल ऑब्जेक्ट है और क्लास ClassName है। पायथन में एक फ़ाइल एक मॉड्यूल है और फ़ाइल के अंदर वर्ग परिभाषा (एस) कक्षाएं हैं।
केली बैंग

6

@ मिक्की पेर्लस्टीन के जवाब और उनके 3 घंटे के जासूसी के काम के बाद भी, मुझे अपनी खुद की गंदगी को लागू करने में कुछ और मिनट लगे। मामले में मेरे जैसा कोई और है और उसे थोड़ी और मदद की ज़रूरत है, यहाँ मेरी स्थिति क्या है।

  • प्रतिक्रियाएं एक मॉड्यूल है
  • प्रतिक्रिया मॉड्यूल के भीतर एक आधार वर्ग है
  • GeoJsonResponse एक नया वर्ग है जो प्रतिक्रिया से प्राप्त होता है

प्रारंभिक GeoJsonResponse वर्ग:

from pyexample.responses import Response

class GeoJsonResponse(Response):

    def __init__(self, geo_json_data):

ठीक लग रहा है। कोई समस्या नहीं है जब तक आप उस चीज़ को डिबग करने का प्रयास नहीं करते हैं, जो तब होता है जब आपको इस तरह प्रतीत होता है अस्पष्ट त्रुटि संदेशों का एक गुच्छा मिलता है:

pyexample.responses से GeoJsonResponse आयात करें .. \ pyexample \ response \ GeoJsonResponse.py: 12: in (मॉड्यूल) वर्ग GeoJsonResponse (प्रतिक्रिया):

E TypeError: मॉड्यूल () में अधिकतम 2 तर्क दिए गए (3 दिए गए)

=================================== एरर ============== ======================

___________________ ERROR एकत्रित परीक्षण / test_geojson.py ____________________

test_geojson.py:2: in (मॉड्यूल) pyexample.responses से GeoJsonResponse आयात करें .. \ pyexample \ response \ GeoJsonResponse.py: 12: in (मॉड्यूल)

वर्ग GeoJsonResponse (प्रतिसाद): E टाइपError: मॉड्यूल () सबसे अधिक 2 तर्क (3 दिए गए) लेता है

त्रुटि: नहीं मिली: \ PyExample \ परीक्षण \ test_geojson.py :: TestGeoJson :: test_api_response

सी:। \ Python37 \ lib \ साइट-संकुल \ aenum__init __ py: 163

(कोई भी नाम 'PyExample \ test \ test_geojson.py :: TestGeoJson :: test_api_response' में नहीं है] []

त्रुटियां मुझे सही दिशा में इंगित करने के लिए पूरी कोशिश कर रही थीं, और @ मिक्की पेर्स्टीन का जवाब मृत था, मुझे सिर्फ अपने संदर्भ में यह सब करने में एक मिनट का समय लगा:

मैं मॉड्यूल आयात कर रहा था :

from pyexample.responses import Response

जब मुझे कक्षा आयात करनी चाहिए थी :

from pyexample.responses.Response import Response

आशा है कि यह किसी की मदद करता है। (मेरे बचाव में, यह अभी भी बहुत जल्दी है।)


यह सवाल कैसे संबंधित है?
लीवी एल।

3

आप पायथन 3.6.1 में निम्न कार्य भी कर सकते हैं

from Object import Object as Parent

और आपकी कक्षा की परिभाषा:

class Visitor(Parent):


0

मेरे मामले में जहां मुझे समस्या थी कि मैं एक मॉड्यूल का जिक्र कर रहा था जब मैंने कक्षा को विस्तारित करने की कोशिश की।

import logging
class UserdefinedLogging(logging):

यदि आप प्रलेखन जानकारी को देखते हैं, तो आप मॉड्यूल के रूप में प्रदर्शित "लॉगिंग" देखेंगे।

इस विशिष्ट मामले में मुझे बस लॉगिंग के लिए एक अतिरिक्त वर्ग बनाने के लिए लॉगिंग मॉड्यूल को इनहेरिट करना पड़ा।


यह एक टिप्पणी के रूप में अर्हता प्राप्त कर सकता है, उत्तर नहीं। कृपया केवल जवाब दें यदि आपको लगता है कि यह समस्या को हल करेगा।
हमजा खुर्शीद

उसके लिए माफ़ करना। मैं स्टैकओवरफ़्लो का सक्रिय रूप से उपयोग करने के लिए नया हूं और मैं साइट के नेटिकट से परिचित नहीं हूं।
गेरार्डसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.