2014-02-06 71 views
11

在Python中實現純虛方法的思想正確方法是什麼?Python中的純虛方法

只提高NotImplementedError的方法?

或者還有更好的方法嗎?

謝謝!

回答

14

雖然它並不少見people using NotImplementedError,有些人會認爲「正確」的方式做到這一點(因爲Python 2.6)使用抽象基類,通過abc module

from abc import ABCMeta, abstractmethod 

class MyAbstractClass(object): 
    __metaclass__=ABCMeta 
    @abstractmethod 
    def my_abstract_method(): 
     pass 

使用abc比使用NotImplementedError有兩個主要(潛在的)優勢。

首先,你將不能夠實例化抽象類(無需__init__黑客):

>>> MyAbstractClass() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: Can't instantiate abstract class MyAbstractClass with abstract methods my_abstract_method 

其次,你將不能夠實例化沒有實現所有抽象的任何子類方法:

>>> class MyConcreteClass(MyAbstractClass): 
...  pass 
... 
>>> MyConcreteClass() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: Can't instantiate abstract class MyConcreteClass with abstract methods my_abstract_method 

Here's a more complete overview on abstract base classes