Number पर एक नज़र डालें। वे वस्तु के वर्ग को लचीला होना चाहते हैं। Number(...) => Int/Float/...
जो __init__
द्वारा हासिल नहीं किया जा सकता है।
इसके अलावा __init__
__new__
के तर्कों मिलेगा लेकिन यदि आप मूल तर्क की जरूरत नहीं है matexpr.py देख सकते हैं या आप की जरूरत उन्हें __new__
क्या पहले से ही किया था (उदाहरण के for __reduce__
के लिए) के लिए अनुकूलित किया जाना है।
अधिकांश ऑब्जेक्ट अपने __slots__
को परिभाषित करता है, इसलिए निश्चित गुण हैं जिन्हें उन्हें असाइन किया जा सकता है। असाइनमेंट __new__
और __init__
में किया जा सकता है। मुझे बस उन्हें सेट करने और कोई अन्य ऑपरेशन करने के लिए एक नया __init__
खोलने की आवश्यकता नहीं दिखाई दे रही है - मार्टिजन पीटर और उपयोगकर्ता 4815162342 [source] ने बताया कि ऑब्जेक्ट्स अपरिवर्तनीय हैं।
कभी कभी __init__
नहीं, एक या दो बार कहा जाता है अगर तुम वर्ग बदलने के लिए:
class X(object):
def __new__(self): # sorry but self is the class I apologize!
obj = object.__new__(Y)
return obj
def __init__(self):
print 1
>>> class Y(object):
def __init__(self):
print 2
>>> X() # no __init__ call, limiting you to stay in the class hierarchy
<__main__.Y object at 0x7f287e769350>
>>> class Y(X):
def __init__(self):
print 2
>>> X() # one __init__ call
2
<__main__.Y object at 0x7f287e7693d0>
>>> class X(object):
def __new__(self):
obj = Y()
return obj
def __init__(self):
print 1
>>> class Y(X):
def __new__(self):
return object.__new__(self)
def __init__(self):
print 2
>>> X() # __init__ called twice, structure copied from number.py
2
2
<__main__.Y object at 0x7f287e7692d0>
मुझे सही अगर मैं गलत हूँ। मुझे नहीं लगता कि इस उत्तर के पूरा हो गया है, लेकिन इन जटिलताओं मैं करने के लिए अतिरिक्त __init__
का उपयोग नहीं करने के लिए है कि वस्तुओं अपरिवर्तनीय के रूप में मार्टिन पीटर्स ने उल्लेख किया और 2 downvotes जवाब को नष्ट करने के लिए user4815162342 [source]
प्रतीक्षा की जा रही किया जाना चाहिए प्रेरित करने लायक पाए जाते हैं।
मुझे लगता है कि वे सभी अपरिवर्तनीय माना जाता है? –
@MartijnPieters - मेरा मानना है कि उन्हें फिर से काम करने से बचने के लिए हैशबल होने की आवश्यकता है जो पहले से ही a.la memoization किया जा चुका है। – mgilson
यह सिर्फ एक ऐतिहासिक दुर्घटना हो सकती है; पुराने संस्करण (उदा। 0.5.x) में काफी जटिल संरचना है जहां शायद यह उचित था। – ecatmur