1、簡述面向對象的三大特性。
# 答案
封裝:
封裝指的是把一堆數據屬性與方法數據放在一個容器中,這個容器就是對象。讓對象可以通過 "." 來調用對象中的數據屬性與方法屬性。
繼承:
繼承指的是子類可以繼承父類的數據屬性與方法屬性,並可以對其進行修改或使用。
多態:
在python中的多態指的是讓多種類若具備類似的數據屬性與方法屬性,都統一好命名規范,這樣可以提高開發者的代碼統一性,使得調用者更方便去理解。
2、什么是鴨子模型?
# 答案
在python中不會強制性要求所有人的代碼都統一規范,不統一也不會報錯,若使用抽象類就會使python代碼強制統一規范,這樣不符合python動態語言的特性。所以讓大家都自覺統一好規范,若大家的對象方法都類似的話就一種規范,只要長得像鴨子,就稱之為鴨子類型。
3、super 的作用?
# 答案
'''
使用super()可以在子類中調用父類的方法或屬性, 可能你會說, 子類本來就可以調用父類中所有非私有的屬性或方法,而我現在說的是, 當子類中實現了某個方法, 父類中也有這個方法, 當你調用這個方法時, 既想執行子類的又想執行父類的, 在這種情況下就可以使用super()
'''
4、mro 是什么?
# 答案
'''
mro全稱Method Resolution Order,指的是方法解析順序。
方法調用時就需要對當前類和基類進行搜索以確定方法所在的位置。而搜索的順序就是所謂的「方法解析順序」。
'''
5、什么是 c3 算法?
# 答案
'''
C3算法最早被提出是用於Lisp的,應用在Python中是為了解決原來基於深度優先搜索算法不滿足本地優先級,和單調性的問題。
本地優先級:指聲明時父類的順序,比如C(A,B),如果訪問C類對象屬性時,應該根據聲明順序,優先查找A類,然后再查找B類。
單調性:如果在C的解析順序中,A排在B的前面,那么在C的所有子類里,也必須滿足這個順序。
'''