[問題解決]NotImplementedError 錯誤原因:子類沒有實現父類要求一定要實現的接口


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!

從程序的執行結果可以看出,只要相應的方法接口進行了實現,在執行的時候未實施的錯誤便不會報出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM