1#-*- coding:utf-8 -*-
2class
super(object):34
deftest(self):
5self.action()67
class
sub(super):89
defaction(self):
10print
"sub action"11
12 obj=sub()
13 obj.test()
**中,超類super中定義了乙個函式test。呼叫了自身的action函式。但是super中並沒有定義action函式。
這是為什麼?
在這個例子中的超類,有時會叫做抽象超類。意思是說,類的部分行為由子類來提供。如果預期的方法沒有在子類中有定義,那麼會丟擲沒有定義變數名的異常。
這就是為什麼上面**的輸出是
sub action
為了避免子類忘記實現action函式,在super類中,也可以加上action函式,並使用assert來提示使用者必須覆蓋這個函式。
**如下:
classsuper(object):
deftest(self):
self.action()
defaction(self):
assert false,"
action must be implemented!
"
當然,也可以在super中使用丟擲異常的方法來實現這個提示子類覆蓋action函式的功能。
**如下:
classsuper(object):
deftest(self):
self.action()
defaction(self):
raise notimplementederror("
action must be implemented!
")
Python中的抽象類和抽象方法
在python中類 通過繼承metaclass abcmeta類來建立抽象類,抽象類是包含抽象方法的類,其中abcmeta類 metaclass for defining abstact baseclasses,抽象基類的元類 是所有抽象類的基類。定義了抽象類後,在要實現抽象方法的前一行使用 abc...
python 中抽象基類簡介
簡介 python中雖然鴨子型別很強大,但鴨子型別也有著不足。具體關於分類可以參照水禽的分類理解。因此,參照水禽的分類學演化,我建議在鴨子型別的基礎上增加白鵝型別 goose typing 白鵝型別指,只要cls是抽象基類,即cls的元類是abc.abcmeta,就可以使用isinstance ob...
python的抽象類
抽象類 類中可以存在抽象方法,類中的抽象方法是由子類來實現,如果通過類的例項是不能被呼叫的抽象方法,只能由子類的例項物件來呼叫 子類要重寫抽象方法 class print def black print msg raise exception 必須子類實現 def rgb print msg pas...