2015-02-24 144 views
2

我嘗試下面的Python代碼:沒有錯誤,而實例化抽象類,雖然抽象方法未實現

from abc import ABCMeta, abstractmethod 

class Bar: 

    __metaclass__ = ABCMeta 

    @abstractmethod 
    def foo(self): 
     pass 


class Bar2(Bar): 
    def foo2(self): 
     print("Foo2") 


b = Bar() 
b2 = Bar2() 

我想有@abstractmethod將確保我的父類將是抽象的子類由於它沒有實施抽象方法,因此也是抽象的。但是在這裏,我嘗試實例化兩個類都沒有錯誤。

任何人都可以解釋爲什麼嗎?

+0

我也有例外'B =酒吧()類型錯誤:無法實例化抽象類酒吧與抽象方法foo' – 2015-02-24 05:50:36

+0

@TanveerAlam即使我很驚訝...我沒有得到錯誤...是因爲版本?我正在使用3.4 – codingsplash 2015-02-24 05:52:51

回答

5

您必須設置元類Bar類到ABCMeta

的Python 2:

class Bar: 
    __metaclass__ = ABCMeta 

    @abstractmethod 
    def foo(self): 
     pass 

的Python 3:

class Bar(object, metaclass=ABCMeta): 
    @abstractmethod 
    def foo(self): 
     pass 
+0

此外,必須至少有一個抽象方法才能引發錯誤,就像在您的示例中一樣。 – 2017-02-05 15:39:47