NotImplementedError: 子類沒有實現父類要求一定要實現的接口。
在面向對象編程中,父類中可以預留一個接口不實現,要求在子類中實現。如果一定要子類中實現該方法,可以使用raise NotImplementedError報錯。
具體實現方式:
如果子類沒有實現父類中指定要實現的方法,則會自動調用父類中的方法,而父類方法又是raise將錯誤拋出。這樣代碼編寫者就能發現是缺少了對指定接口的實現。
以下代碼來源:https://blog.csdn.net/grey_csdn/article/details/77074707
寫一段代碼如下:
class ClassDemo:
def test_demo(self):
raiseNotImplementedError("my test: not implemented!")
classChildClass(ClassDemo):
pass
inst =ChildClass()
inst.test_demo()
程序運行結果:
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\10>pythonerror_demo.py
Traceback (mostrecent call last):
File "error_demo.py", line 9, in<module>
inst.test_demo()
File "error_demo.py", line 3, intest_demo
raise NotImplementedError("my test:not implemented!")
NotImplementedError:my test: not implemented!
從上面的運行結果可以看出,程序識別到了這個方法並沒有在子類中實現卻被調用了。從代碼報錯的行數來看,只有這個子類的實例化對象調用相應的方法的時候才會報錯。這樣的推測結論也很容易通過代碼修改測試得到驗證,此處不再驗證。
進一步修改代碼:
class ClassDemo:
def test_demo(self):
raiseNotImplementedError("my test: not implemented!")
classChildClass(ClassDemo):
def test_demo(self):
print("OKOKOOK!")
inst =ChildClass()
inst.test_demo()
在新的代碼中,子類中實現了對test_demo方法的設計。程序的運行結果如下:
E:\01_workspace\02_programme_language\03_python\OOP\2017\08\10>pythonerror_demo.py
OKOKOOK!
從程序的執行結果可以看出,只要相應的方法接口進行了實現,在執行的時候未實施的錯誤便不會報出。