कैसे के बारे में बस उप classing (पायथन में अस्थिरता के लिए प्रमुख उदाहरण) list
?
class CharList(list):
def __init__(self, s):
list.__init__(self, s)
@property
def list(self):
return list(self)
@property
def string(self):
return "".join(self)
def __setitem__(self, key, value):
if isinstance(key, int) and len(value) != 1:
cls = type(self).__name__
raise ValueError("attempt to assign sequence of size {} to {} item of size 1".format(len(value), cls))
super(CharList, self).__setitem__(key, value)
def __str__(self):
return self.string
def __repr__(self):
cls = type(self).__name__
return "{}(\'{}\')".format(cls, self.string)
यदि आप इसे मुद्रित करना चाहते हैं या स्ट्रिंग प्रस्तुति के लिए सक्रिय रूप से पूछना चाहते हैं तो यह केवल स्ट्रिंग पर सूची में शामिल हो जाता है। उत्परिवर्तन और विस्तार छोटा है, और उपयोगकर्ता जानता है कि यह केवल एक सूची है क्योंकि इसे पहले से कैसे किया जाए।
उदाहरण उपयोग:
s = "te_st"
c = CharList(s)
c[1:3] = "oa"
c += "er"
print C# prints "toaster"
print c.list # prints ['t', 'o', 'a', 's', 't', 'e', 'r']
निम्नलिखित तय हो गई है, नीचे अद्यतन देखें।
एक (हल करने योग्य) चेतावनी है: कोई जांच नहीं है (अभी तक) कि प्रत्येक तत्व वास्तव में एक चरित्र है। यह कम से कम सब कुछ के लिए मुद्रण विफल हो जाएगा लेकिन स्ट्रिंग्स। एक CharList आइटम पर
कस्टम
__setitem__
साथ
[नीचे दिए गए कोड उदाहरण देखें], लंबाई की एक स्ट्रिंग बताए = 1 एक ValueError
बढ़ा देंगे: हालांकि, उन में शामिल हो गए जा सकता है और इस तरह अजीब स्थितियों का कारण हो सकता। बाकी सब कुछ अभी भी स्वतंत्र रूप से असाइन किया जा सकता है लेकिन string.join()
ऑपरेशन के कारण मुद्रण करते समय TypeError: sequence item n: expected string, X found
बढ़ाएगा। अगर वह पर्याप्त नहीं है, आगे के चेक आसानी से (संभावित भी __setslice__
करने के लिए या (प्रदर्शन अलग हो सकता है ?!) collections.Sequence
के आधार वर्ग स्विचिंग, cf here द्वारा)
s = "test"
c = CharList(s)
c[1] = "oa"
# with custom __setitem__ a ValueError is raised here!
# without custom __setitem__, we could go on:
c += "er"
print C# prints "toaster"
# this looks right until here, but:
print c.list # prints ['t', 'oa', 's', 't', 'e', 'r']
सूचियाँ इस बात के लिए बहुत अच्छी तरह से काम करते हैं जोड़ा जा सकता है उद्देश्य। –
कुछ लिंक: [LINK1] (http://mail.python.org/pipermail/tutor/2003-August/024485.html), [LINK2] (http://www.skymind.com/~ocrow/ python_string /) – digEmAll
क्या आप कृपया समझा सकते हैं, आपको म्यूटेबल तारों की आवश्यकता क्यों है? उपयोग का मामला क्या है? –