मैं एक ऑब्जेक्ट को कार्यान्वित कर रहा हूं जो लगभग एक सेट के समान है, लेकिन एक अतिरिक्त आवृत्ति चर की आवश्यकता है, इसलिए मैं अंतर्निर्मित सेट ऑब्जेक्ट को उप-वर्गीकृत कर रहा हूं। यह सुनिश्चित करने का सबसे अच्छा तरीका क्या है कि जब मेरी ऑब्जेक्ट्स की प्रतिलिपि बनाई जाती है तो इस चर के मान की प्रतिलिपि बनाई जाती है?पाइथन सेट क्लास को उपclass करने के लिए सही (या सबसे अच्छा) तरीका क्या है, एक नया इंस्टेंस चर जोड़ना?
वर्ष सेट मॉड्यूल का उपयोग करना, निम्नलिखित कोड पूरी तरह से काम किया:
import sets
class Fooset(sets.Set):
def __init__(self, s = []):
sets.Set.__init__(self, s)
if isinstance(s, Fooset):
self.foo = s.foo
else:
self.foo = 'default'
f = Fooset([1,2,4])
f.foo = 'bar'
assert((f | f).foo == 'bar')
लेकिन इस का उपयोग कर काम नहीं करता है में निर्मित सेट मॉड्यूल।
एकमात्र समाधान जो मैं देख सकता हूं वह प्रतिलिपि सेट ऑब्जेक्ट लौटने वाली प्रत्येक विधि को ओवरराइड करना है ... इस मामले में मैं सेट ऑब्जेक्ट को उप-वर्गीकरण भी परेशान नहीं कर सकता। निश्चित रूप से ऐसा करने का एक मानक तरीका है?
(स्पष्ट करने के लिए निम्न कोड करता नहीं काम (अभिकथन विफल रहता है):
class Fooset(set):
def __init__(self, s = []):
set.__init__(self, s)
if isinstance(s, Fooset):
self.foo = s.foo
else:
self.foo = 'default'
f = Fooset([1,2,4])
f.foo = 'bar'
assert((f | f).foo == 'bar')
)
यह एक उपयोगी योगदान है, धन्यवाद। ऐसा लगता है कि आप _wrap_methods को किसी फ़ंक्शन की बजाय क्लास विधि बनाकर बहुत अधिक लाभ प्राप्त कर रहे हैं - क्या यह पूरी तरह से मॉड्यूलरिटी के लिए देता है? – rog
यह वास्तव में अच्छा है, अंतर्दृष्टि योगदान के लिए धन्यवाद! – bjd2385