python面試題小結附答案實例代碼
1 談談你對面向對象的理解?
面向對象的編程---object oriented programming,簡稱:OOP,是一種編程的思想。OOP把對象當成一個程序的基本單元,一個對象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。面向對象的出現(xiàn)極大的提高了編程的效率,使其編程的重用性增高。
python面向對象的重要術語:
多態(tài)(polymorphism):一個函數(shù)有多種表現(xiàn)形式,調用一個方法有多種形式,但是表現(xiàn)出的方法是不一樣的。
繼承(inheritance)子項繼承父項的某些功能,在程序中表現(xiàn)某種聯(lián)系
封裝(encapsulation)把需要重用的函數(shù)或者功能封裝,方便其他程序直接調用
類:對具有相同數(shù)據(jù)或者方法的一組對象的集合
對象:對象是一個類的具體事例
實例化:是一個對象事例話的實現(xiàn)
標識:每個對象的事例都需要一個可以唯一標識這個事例的標記
python中的類與對象
class Person(object):
def __init__(self,name): #————————>初始化函數(shù)
self.name = name
print "------>create:",name
def say_name(self):
print "my name is %s" %self.name
p1 = Person("gf1") # --------->類的實例化
p2 = Person("gf2")
p1.say_name()
p2.say_name()
以上程序是類的一個基本寫法,理解如下:
person就是一個類,在這個類中是很多的方法集合。例如類中包含sayname等,還可以按照程序要求靈活添加各種類的方法。
類中self其實就是類的對象,是一個具體的實例。多種的實例通過類中的self表現(xiàn)出來。
程序中的p1、p2是具體的實例,實體。(學名叫:對象。)。一個對象就是一個實體。實體通過調用屬性、方法在類中體現(xiàn)相應的功能。
python中的繼承
承就是子類繼承了父類相應的功能和方法。
如下代碼說明了子類繼承父類:
class firsttest:
def __init__(self,name):
self._name = name
def sayfirst(self):
print("hello {0}".format(self._name))
class secondtest(firsttest): #子類繼承父類(firsttest)的方法
def __init__(self,name):
firsttest.__init__(self,name)
def saysecond(self):
print("good {0}").format(self._name)
s = secondtest("gf1") #類的具體實例。
s.sayfirst()
s.saysecond()
函數(shù)和面向對象編程的區(qū)別
相同點:都是把程序進行封裝、方便重復利用,提高效率。
不同點:函數(shù)重點是用于整體調用,一般用于一段不可更改的程序。僅僅是解決代碼重用性的問題。
而面向對象出來代碼重用性。還包括繼承、多態(tài)等。使用上更加靈活。
2 面向對象中super的作用?
Python中對象方法的定義很怪異,第一個參數(shù)一般都命名為self(相當于其它語言的this,比如:C#),用于傳遞對象本身,而在調用的時候則不
必顯式傳遞,系統(tǒng)會自動傳遞。
今天我們介紹的主角是super(), 在類的繼承里面super()非常常用, 它解決了子類調用父類方法的一些問題, 父類多次被調用時只執(zhí)行一次, 優(yōu)化了執(zhí)行邏輯,下面我們就來詳細看一下。
舉一個例子:
class Foo:
def bar(self, message):
print(message)
Foo().bar("Hello, Python.")
Hello, Python
當存在繼承關系的時候,有時候需要在子類中調用父類的方法,此時最簡單的方法是把對象調用轉換成類調用,需要注意的是這時self參數(shù)需要顯式傳遞,例如:
class FooParent:
def bar(self, message):
print(message)
class FooChild(FooParent):
def bar(self, message):
FooParent.bar(self, message)
FooChild().bar("Hello, Python.")
Hello, Python.
這樣做有一些缺點,比如說如果修改了父類名稱,那么在子類中會涉及多處修改,另外,Python是允許多繼承的語言,如上所示的方法在多繼承時就需要重復寫多次,顯得累贅。為了解決這些問題,Python引入了super()機制,例子代碼如下:
class FooParent:
def bar(self, message):
print(message)
class FooChild(FooParent):
def bar(self, message):
super(FooChild, self).bar(message)
FooChild().bar("Hello, Python.")
Hello, Python
表面上看 super(FooChild, self).bar(message)方法和FooParent.bar(self, message)方法的結果是一致的,實際上這兩種方法的內部處理機制大大不同,當涉及多繼承情況時,就會表現(xiàn)出明顯的差異來,直接給例子: 代碼一:
class A:
def __init__(self):
print("Enter A")
print("Leave A")
class B(A):
def __init__(self):
print("Enter B")
A.__init__(self)
print("Leave B")
class C(A):
def __init__(self):
print("Enter C")
A.__init__(self)
print("Leave C")
class D(A):
def __init__(self):
print("Enter D")
A.__init__(self)
print("Leave D")
class E(B, C, D):
def __init__(self):
print("Enter E")
B.__init__(self)
C.__init__(self)
D.__init__(self)
print("Leave E")
E()
結果:
Enter E Enter B Enter A Leave A Leave B Enter C Enter A Leave A Leave C Enter D Enter A Leave A Leave D Leave E
執(zhí)行順序很好理解,唯一需要注意的是公共父類A被執(zhí)行了多次。
總結
以上所述是小編給大家介紹的python面試題小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
相關文章
python統(tǒng)計字符串中字母出現(xiàn)次數(shù)代碼實例
這篇文章主要介紹了python統(tǒng)計字符串中字母出現(xiàn)次數(shù)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
利用Python實現(xiàn)文件讀取與輸入以及數(shù)據(jù)存儲與讀取的常用命令
這篇文章主要給大家介紹了關于利用Python實現(xiàn)文件讀取與輸入以及數(shù)據(jù)存儲與讀取的常用命令,文中還介紹了用python循環(huán)保存文件并循環(huán)讀取文件的方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11
Python圖像銳化與邊緣檢測之Sobel與Laplacian算子詳解
圖像銳化和邊緣檢測主要包括一階微分銳化和二階微分銳化,本文主要講解常見的圖像銳化和邊緣檢測方法,即Sobel算子和Laplacian算子,感興趣的可以了解一下2022-12-12
Python SVM(支持向量機)實現(xiàn)方法完整示例
這篇文章主要介紹了Python SVM(支持向量機)實現(xiàn)方法,結合完整實例形式分析了基于Python實現(xiàn)向量機SVM算法的具體步驟與相關操作注意事項,需要的朋友可以參考下2018-06-06

