फिर भी
तो कोड है कि बस ब्याज की वस्तुओं उत्पन्न निकालने एक और जवाब "असाइन एंड टेस्ट" रेसिपी का उपयोग करना है, O'Reilly Media के जुलाई 2002 में पायथन कुकबुक और online के सक्रिय संस्करण पर प्रकाशित एक कथन में असाइन करने और परीक्षण करने की अनुमति देने के लिए "असाइन करें और परीक्षण करें" नुस्खा का उपयोग करना है। यह वस्तु उन्मुख है, जो की जड़ यह है:
# from http://code.activestate.com/recipes/66061
class DataHolder:
def __init__(self, value=None):
self.value = value
def set(self, value):
self.value = value
return value
def get(self):
return self.value
यह वैकल्पिक रूप से कस्टम __call__()
विधि नीचे दिखाया गया जोड़ने उदाहरणों 'मूल्यों को पुनः प्राप्त करने का एक वैकल्पिक तरीका प्रदान करने के लिए थोड़ा संशोधित किया जा सकता है - जो है, जबकि कम स्पष्ट , मुझे लगता है कि 'DataHolder' ऑब्जेक्ट के लिए पूरी तरह तार्किक चीज़ की तरह लगता है, मुझे लगता है।
def __call__(self):
return self.value
अपने उदाहरण फिर से लिखा अनुमति देने के लिए किया जा:
r = DataHolder()
for s in strings:
if r.set(regex.match(s))
print r.get().groups()
# or
print r().groups()
के रूप में भी मूल नुस्खा में बताया गया है, यदि आप इसे एक बहुत का उपयोग करें, वर्ग और/या करने के लिए इसे का एक उदाहरण जोड़ने __builtin__
मॉड्यूल यह दुनिया में उपलब्ध कराना संभावित कमियां के बावजूद बहुत आकर्षक है:
import __builtin__
__builtin__.DataHolder = DataHolder
__builtin__.data = DataHolder()
मैं इस सवाल का मेरे अन्य जवाब में उल्लेख किया है, यह ध्यान दिया जाना चाहिए कि इस दृष्टिकोण की सीमा है एक समय में केवल एक परिणाम/मूल्य धारण करने के लिए एड, ऐसे परिस्थितियों को संभालने के लिए एक से अधिक उदाहरणों की आवश्यकता होती है जहां कई मानों को एक साथ सहेजने की आवश्यकता होती है, जैसे नेस्टेड फ़ंक्शन कॉल, लूप या अन्य थ्रेड। इसका मतलब यह नहीं है कि आपको इसका इस्तेमाल करना चाहिए या अन्य जवाब, बस इतना प्रयास करना आवश्यक होगा।
'str' पायथन में एक अंतर्निहित प्रकार है इसलिए चर नामों के लिए उपयोग से बचा जाना चाहिए। – martineau