Friday 15 March 2013

python - How can I increase counter properties of class when a instance is called? -


सरल वर्ग है:

  वर्ग ए (ऑब्जेक्ट): __COUNTER = 0 def do_something_1 (स्वयं): ... def do_something_2 (स्वयं): ... def do_something_N (स्वयं): ...    

क्या कोई निर्णय है जो बढ़ा सकता है < कोड> स्वयं .__ COUNTER विधि बुला कर, लेकिन इसे प्रत्येक फ़ंक्शन पर लिख नहीं सकता?

मुझे कुछ के रूप में चाहिए:

  a = A ) # COUNTER = 1 बी = ए () # COUNTER = 2 सी = ए () # COUNTER = 3     

विधियों में हुक करने के लिए कहा जाता है कि आपको डेकोरेटर का उपयोग करना होगा:

  def increment_counter (विधि): डेफ आवरण (स्वयं, * आर्ग्स, * * केडब्ल्यू): स्वयं। टैग: + 1 वापसी पद्धति (स्वयं, * आर्ग्स, ** केडब्ल्यू) रिटर्न आवरण   

और इसे अपनी कक्षा में प्रत्येक विधि के लिए लागू करें:

  वर्ग ए (ऑब्जेक्ट): _COUNTER = 0 @increment_counter def do_something_1 (स्वयं): ... @increment_counter def do_something_2 (स्वयं): ... @increment_counter def do_something_N (स्वयं): ...   

ध्यान दें कि मैंने एक अंडरस्कोर का उपयोग करने के लिए काउंटर का नाम बदला गड़बड़ नाम।

यदि आप चाहिए के पास __ COUNTER काम है (इसलिए डबल अंडरस्कोर के साथ), आप कक्षा के नाम से गुजरकर ऐसा कर सकते हैं :

  def increment_counter (classname): counter_attribute = '_ {} __ COUNTER.format (classname) def increment_counter_decorator (विधि): def wrapper (स्वयं, * args, ** kw): setattr   

फिर से तरीकों को सजाने के लिए: पूर्व> @increment_counter ('ए') def do_something_1 (स्वयं): ...

यदि आप इसके बजाय एक काउंटर प्रति उदाहरण बनाना चाहते हैं, बस क्लास पर काउंटर में जोड़ें:

  वर्ग ए (ऑब्जेक्ट): _COUNTER = 0 def __init __ (स्वयं): ए। एएआईआर + = 1   

या प्रकार का उपयोग करें (से एलएफ) ._ COUNTER यदि आप की एक उप काउंटर प्रति अलग काउंटर का उपयोग करना चाहते हैं।

No comments:

Post a Comment