2013-07-01 6 views
12

मैं जैसे, एक "सार" वर्ग हैक्या पाइथन में यह घोषणा करना संभव है कि विधि को ओवरराइड किया जाना चाहिए?</p> <pre><code>class A: def do_some_cool_stuff(): ''' To override ''' pass def do_some_boring_stuff(): return 2 + 2 </code></pre> <p>और वर्ग बी, ए उपवर्गीकरण:

class B(A): 
    def do_stuff() 
     return 4 

वहाँ घोषित करने के लिए कोई तरीका है, कि एक विधि A.do_some_cool_stuff ओवरराइड किया जाना चाहिए , और, संभवतः बी-क्लास ऑब्जेक्ट बनाने की कोशिश करते समय कुछ चेतावनी उठाई जानी चाहिए, जब बी ने A.do_some_cool_stuff लागू नहीं किया था?

उत्तर

25

हाँ, एक ABC (Abstract Base Class) के रूप में परिभाषित करते हुए A:

from abc import ABCMeta, abstractmethod 

class A(object): 
    __metaclass__ = ABCMeta 

    @abstractmethod 
    def do_some_cool_stuff(): 
     ''' To override ''' 
     pass 

    def do_some_boring_stuff(): 
     return 2 + 2 

आप A उपवर्ग कर सकते हैं, लेकिन आप केवल इस तरह के एक उपवर्ग के उदाहरण बना सकते हैं do_some_cool_stuff() विधि एक ठोस कार्यान्वयन है यदि:

>>> from abc import ABCMeta, abstractmethod 
>>> class A(object): 
...  __metaclass__ = ABCMeta 
...  @abstractmethod 
...  def do_some_cool_stuff(): 
...   ''' To override ''' 
...   pass 
...  def do_some_boring_stuff(): 
...   return 2 + 2 
... 
>>> class B(A): 
...  def do_stuff(): 
...   return 4 
... 
>>> B() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: Can't instantiate abstract class B with abstract methods do_some_cool_stuff 
+0

यही वह है जिसे मैं ढूंढ रहा हूं, धन्यवाद! –

संबंधित मुद्दे

 संबंधित मुद्दे