मैं एक सजावट बनाना चाहता हूं जो संपत्ति की तरह काम करता है, केवल यह केवल सजाए गए फ़ंक्शन को केवल एक बार कॉल करता है, और बाद में कॉल हमेशा पहली कॉल का परिणाम वापस कर देता है। एक उदाहरण:किसी संपत्ति के आलसी प्रारंभिकरण के लिए सजावट बनाने के लिए
def SomeClass(object):
@LazilyInitializedProperty
def foo(self):
print "Now initializing"
return 5
>>> x = SomeClass()
>>> x.foo
Now initializing
5
>>> x.foo
5
मेरा विचार इस के लिए एक कस्टम सजावट लिखना था। तो मैं शुरू कर दिया है, और इस कितनी दूर मैं आया है:
class LazilyInitializedProperty(object):
def __init__(self, function):
self._function = function
def __set__(self, obj, value):
raise AttributeError("This property is read-only")
def __get__(self, obj, type):
# problem: where to store the value once we have calculated it?
आप देख सकते हैं, मैं जहां कैश की गई मूल्य स्टोर करने के लिए पता नहीं है। सबसे सरल समाधान केवल एक शब्दकोश को बनाए रखने के लिए प्रतीत होता है, लेकिन मैं सोच रहा हूं कि इसके लिए एक और अधिक सुरुचिपूर्ण समाधान है या नहीं।
EDIT इसके लिए खेद है, मैं यह उल्लेख करना भूल गया कि मैं संपत्ति को केवल पढ़ने के लिए चाहता हूं।
यह मेरे प्रश्नों का डुप्लिकेट हो सकता है: [अजगर आलसी संपत्ति डेकोरेटर] (http://stackoverflow.com/questions/3012421/python-lazy-property-decorator) – detly
आप ठीक कह रहे हैं यह है। सुझाव-बॉक्स में इसे नहीं देखा। बंद करने के लिए वोटिंग। –