का उपयोग कर चेनिंग विधियों [] (__getitem__)
पाइथन ऑपरेटर और प्रारंभिक स्मृति संदर्भ का उपयोग कर श्रृंखला विधियों को अधिभारित करना संभव है।अधिभार [] पायथन ऑपरेटर और मेमोरी संदर्भ
कल्पना कीजिए कि मैं इस तरह, एक वर्ग Math
कि पूर्णांक संख्याओं की सूची को स्वीकार करता है:
class Math(object):
def __init__(self, *args, **kwargs):
assert(all([isinstance(item, int) for item in list(args)]))
self.list = list(args)
def add_one(self):
for index in range(len(self.list)):
self.list[index] += 1
और मैं इस तरह कुछ करना चाहता हूँ:
instance = Math(1,2,3,4,5)
instance[2:4].add_one()
इस कोड instance.list
चाहिए क्रियान्वित करने के बाद [1,2,4,5,5]
हो, क्या यह संभव है?
मुझे पता है कि मैं add_one(2,4)
जैसे कुछ कर सकता हूं, लेकिन यह एपीआई की शैली नहीं है जिसे मैं संभव बनाना चाहता हूं।
धन्यवाद
'xrange (* self.slice.indices (लेन (self.math.list))) 'बहुत अजीब लगता है। क्या कोई बेहतर तरीका है? – Eric
इसके अलावा, आप 'self.fields' और' self.list' – Eric
@Eric मिश्रण कर रहे हैं: मैंने अनियंत्रित Math.add_one को हटा दिया है, और हाँ कि xrange (* ...) बहुत बोझिल लगता है, लेकिन मुझे नहीं पता एक छोटा रास्ता –