python - Specifying an exit function for an abstract function -
मुझे फ़ंक्शन को एक सार विधि से कॉल करने की आवश्यकता है, अर्थात
class A (वस्तु): @ abc.abstractmethod डीईएफ़ Method1 (स्वयं): अपवाद बढ़ा ( "लागू नहीं किया गया विधि") डीईएफ़ Method2 (स्वयं): प्रिंट वर्ग बी (ए) "Method1 समाप्त हो गया": डीईएफ़ Method1 (स्वयं): प्रिंट "से Method1 क्रियान्वित क्लास बी "
मुझे क्या ऐसा करने का एक अच्छा तरीका है? आप metaclass का उपयोग कर सकते हैं, जो कक्षा बनाते समय यह तब लागू होता है जो एक विशिष्ट विधि के लिए मूलतः एक डेकोरेटर होता है, जब भी कोई (उप) वर्ग बनाया जाता है। एक और दृष्टिकोण, कुछ हद तक हैश, विधि पहुंच को रोकना है, लेकिन काम करेगा आप एक या तो दृष्टिकोण परिणाम: आवरण का उपयोग करके लिपटे हुए विधि से इसके कई महत्वपूर्ण गुणों को रखता है, जैसे कि उसका नाम और डॉसस्ट्रिंग। method1
के बाद ए को स्वचालित रूप से कॉल करने की आवश्यकता है I को निष्पादित किया गया है (यह कक्षा <कोड> ए पक्ष पर किया जाना चाहिए - स्वतंत्र रूप से विरासत में मिली कक्षाओं से)।
method1
को लपेटता है: लागू होता __ getAttribute __
पर एक
एक आवरण कहते हैं कि हुक: functools क्लास ए (वस्तु) आयात wraps से
: @abc .abstractmethod डीईएफ़ Method1 (स्वयं): उठाने के अपवाद ( "लागू नहीं किया गया विधि") डीईएफ़ Method2 (स्वयं): प्रिंट "Method1 समाप्त हो गया" डीईएफ़ __getattribute __ (स्वयं, नाम): obj = सुपर (ए, आत्म) .__ getAttribute __ (नाम) यदि नाम == 'Method1': @wraps (obj) डीईएफ़ आवरण (* args, ** kw): रेस = obj () self.method2 () वापसी रेस वापसी आवरण लौट obj
> gt; & gt; बी ()। विधि 1 () कक्षा बी विधि 1 से विधि 1 को निष्पादित करना
Comments
Post a Comment