में चेनिंग (itertools.chain साथ भ्रमित होने की नहीं)विधि अजगर
मैं निम्नलिखित पढ़ रहा था: http://en.wikipedia.org/wiki/Method_chaining
मेरा प्रश्न है: अजगर में विधि श्रृंखलन लागू करने के लिए सबसे अच्छा तरीका क्या है? यदि बुला method(*args)
self.o
को संशोधित करता है लेकिन None
वापस नहीं करता है
class chain():
def __init__(self, my_object):
self.o = my_object
def __getattr__(self, attr):
x = getattr(self.o, attr)
if hasattr(x, '__call__'):
method = x
return lambda *args: self if method(*args) is None else method(*args)
else:
prop = x
return prop
list_ = chain([1, 2, 3, 0])
print list_.extend([9, 5]).sort().reverse()
"""
C:\Python27\python.exe C:/Users/Robert/PycharmProjects/contests/sof.py
[9, 5, 3, 2, 1, 0]
"""
एक समस्या है:
यहाँ मेरी प्रयास है। (तो मुझे self
वापस करना चाहिए या method(*args)
रिटर्न वापस करना चाहिए)।
क्या किसी के पास चेनिंग लागू करने के बेहतर तरीके हैं? ऐसा करने के लिए शायद कई तरीके हैं।
क्या मुझे लगता है कि एक विधि हमेशा None
लौटाती है तो मैं हमेशा self.o
वापस कर सकता हूं?
(नोट मुझे यकीन नहीं है कि पाइथन में विधि श्रृंखला का उपयोग किया जाना चाहिए, लेकिन मुझे अभी भी दिलचस्पी है) –
आपको [शुद्ध फ़ंक्शंस] (http://en.wikipedia.org/wiki/Pure_function) का उपयोग करना चाहिए ताकि वह विधियां 'self.o' को सीधे संशोधित नहीं करती हैं, बल्कि इसके बजाय संशोधित संस्करण लौटाती हैं। साथ ही, '__getattr__' को एक श्रृंखला उदाहरण वापस करना चाहिए। – reubano