इस प्रकार की त्रुटि का सामना करने पर विचार करने के लिए कुछ और:
मैं इस त्रुटि संदेश में चल रहा था और इस पोस्ट को उपयोगी पाया। मेरे मामले में यह पता चला है कि __init__()
जहां वस्तु वस्तु विरासत में मिली थी, मैंने उसे ओवरराइड कर दिया था।
विरासत में मिला उदाहरण लंबा है, इसलिए मैं एक और सरल उदाहरण को छोड़ दूंगा जो विरासत का उपयोग नहीं करता है:
class MyBadInitClass:
def ___init__(self, name):
self.name = name
def name_foo(self, arg):
print(self)
print(arg)
print("My name is", self.name)
class MyNewClass:
def new_foo(self, arg):
print(self)
print(arg)
my_new_object = MyNewClass()
my_new_object.new_foo("NewFoo")
my_bad_init_object = MyBadInitClass(name="Test Name")
my_bad_init_object.name_foo("name foo")
परिणाम है:
<__main__.MyNewClass object at 0x033C48D0>
NewFoo
Traceback (most recent call last):
File "C:/Users/Orange/PycharmProjects/Chapter9/bad_init_example.py", line 41, in <module>
my_bad_init_object = MyBadInitClass(name="Test Name")
TypeError: object() takes no parameters
PyCharm ने इस टाइपो को नहीं पकड़ा। न ही नोटपैड ++ (अन्य संपादकों / आईडीई की ताकत)।
दी, यह एक "कोई पैरामीटर नहीं लेता है" टाइपएयर है, यह पायथन में ऑब्जेक्ट इनिशियलाइज़ेशन के संदर्भ में, एक की उम्मीद करते समय "मिला दो" से बहुत अलग नहीं है।
विषय को संबोधित करते हुए: सिंटैक्टली सही होने पर एक ओवरलोडिंग इनिशियलाइज़र का उपयोग किया जाएगा, लेकिन यदि इसे अनदेखा नहीं किया जाएगा और इसके बजाय अंतर्निहित उपयोग किया जाएगा। ऑब्जेक्ट इस की अपेक्षा / संभाल नहीं करेगा और त्रुटि को फेंक दिया गया है।
साइटैक्स त्रुटि के मामले में: फिक्स सरल है, बस कस्टम इनिट स्टेटमेंट को संपादित करें:
def __init__(self, name):
self.name = name
self
। इसलिए घोषितdef method(arg):
करना एक विधि के लिए गलत है, यह होना चाहिएdef method(self, arg):
। जब विधि प्रेषण इसके खिलाफmethod(arg):
दो मापदंडों को कॉल और मैच करने की कोशिश करता हैself, arg
, तो आपको वह त्रुटि मिलती है।