मैं निम्नलिखित वर्ग है:अजगर, अपरिवर्तनीय उपवर्गीकरण प्रकार
class MySet(set):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
set.__init__(self, arg)
यह काम करता है के रूप में उम्मीद (पत्र से स्ट्रिंग के शब्दों के साथ सेट initialising बल्कि)। लेकिन जब मैं क्या करना चाहते हैं सेट के अपरिवर्तनीय संस्करण के साथ एक ही है, __init__
विधि पर ध्यान नहीं दिया जा रहा है:
class MySet(frozenset):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
frozenset.__init__(self, arg)
मैं __new__
के साथ इसी तरह कुछ हासिल कर सकते हैं?
मैं कारण यह है कि '__new __ (..)' पहल लेता है लगता है कि जब यह बात आती है अपरिवर्तनीय प्रकार के उदाहरणों को मूर्तिकला देने के लिए अपरिवर्तनीयता का लाभ उठाना और उपलब्ध होने पर मौजूदा उदाहरण वापस करने का अवसर सुरक्षित रखना है। (लेकिन अगर कोई उस लाभ को नहीं चाहता है, तो वे '__new __ (..) 'के साथ गड़बड़ किए बिना एक अपरिवर्तनीय प्रकार बना सकते हैं। विशेष रूप से,' __new __ (..)' कोई विशेष संदर्भ नहीं देता है। एक अभी भी 'ऑब्जेक्ट .__ setattr __ (..)' या इसी तरह के माध्यम से अपरिवर्तनीय फ़ील्ड को संशोधित करना है, चाहे वह '__new __ (..)' या '__init _ (..)' के भीतर है। –