2016-01-13 45 views
6

__new__ को परिभाषित करने के बाद कोई पैरामीटर लेता है मैं वास्तव में जहां इस छोटे से कोड में त्रुटि है नहीं मिलता है:लेखन त्रुटि: ऑब्जेक्ट()

#!/usr/bin/python3 


class Personne: 

def __init__(self, nom, prenom): 
    print("Appel de la méthode __init__") 
    self.nom = nom 
    self.prenom = prenom 

def __new__(cls, nom, prenom): 
    print("Appel de la méthode __new__ de la classe {}".format(cls)) 
    return object.__new__(cls, nom, prenom) 

personne = Personne("Doe", "John") 

ऊपर प्रस्तुत इस कोड को मुझे त्रुटि दे रहा है:

Traceback (most recent call last): 
File "/home/bilal/Lien vers python/21_meta_classes/1_instanciation.py", line 21, in <module> 
personne = Personne("Doe", "John") 
File "/home/bilal/Lien vers python/21_meta_classes/1_instanciation.py", line 14, in __new__ 
return object.__new__(cls, nom, prenom) 
TypeError: object() takes no parameters 

उत्तर

9

पायथन 3.3 और बाद में, यदि आप __new__ और __init__ दोनों को ओवरराइड कर रहे हैं, तो आपको object विधियों को ओवरराइड करने के लिए अतिरिक्त तर्क पारित करने से बचने की आवश्यकता है। यदि आप केवल उन तरीकों में से एक को ओवरराइड करते हैं, तो इसे दूसरे के लिए अतिरिक्त तर्क पारित करने की अनुमति है (क्योंकि आमतौर पर आपकी मदद के बिना होता है)।

तो, अपने वर्ग ठीक करने के लिए, __new__ विधि इतनी तरह बदलने के लिए:

def __new__(cls, nom, prenom): 
    print("Appel de la méthode __new__ de la classe {}".format(cls)) 
    return object.__new__(cls) # don't pass extra arguments here! 
+0

Fwiw, ओपी के कोड वास्तव में, Python3.2 में काम करता है, हालांकि त्रुटि वास्तव में Python3.3 + – plamut

+0

धन्यवाद भाई में होता है ऐसा लगता है कि यह काम कर रहा है। कृपया, मुझे बताएं, पाइथन बाकी तर्कों को __init__ पर कैसे पास करता है, क्या आप मुझे प्रक्रिया की व्याख्या कर सकते हैं (यदि आपके पास समय है) ?? – Sidahmed

+0

'__init__' को कॉल 'ऑब्जेक्ट .__ new__'' द्वारा नहीं बनाया गया है, बल्कि 'टाइप .__ कॉल__' (क्लास ऑब्जेक्ट से बाध्य) द्वारा किया गया है। तो 'ऑब्जेक्ट .__ new__' को वही तर्क देखने की आवश्यकता नहीं है जो आपके '__init__' फ़ंक्शन की अपेक्षा करता है। – Blckknght

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