這篇文章給大家分享的是有關(guān)python面試題有哪些的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
目前創(chuàng)新互聯(lián)建站已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。我們擁有完善的網(wǎng)絡(luò)基礎(chǔ)設(shè)施服務(wù),能夠為企業(yè)或個人提供域名注冊、虛擬主機、企業(yè)郵局、網(wǎng)站加速、數(shù)據(jù)庫、云主機等網(wǎng)絡(luò)基礎(chǔ)服務(wù)。1 談?wù)勀銓γ嫦驅(qū)ο蟮睦斫猓?/strong>
面向?qū)ο蟮木幊?--object oriented programming,簡稱:OOP,是一種編程的思想。OOP把對象當成一個程序的基本單元,一個對象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。面向?qū)ο蟮某霈F(xiàn)極大的提高了編程的效率,使其編程的重用性增高。
python面向?qū)ο蟮闹匾g(shù)語:
多態(tài)(polymorphism):一個函數(shù)有多種表現(xiàn)形式,調(diào)用一個方法有多種形式,但是表現(xiàn)出的方法是不一樣的。
繼承(inheritance)子項繼承父項的某些功能,在程序中表現(xiàn)某種聯(lián)系
封裝(encapsulation)把需要重用的函數(shù)或者功能封裝,方便其他程序直接調(diào)用
類:對具有相同數(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是具體的實例,實體。(學(xué)名叫:對象。)。一個對象就是一個實體。實體通過調(diào)用屬性、方法在類中體現(xiàn)相應(yīng)的功能。
python中的繼承
承就是子類繼承了父類相應(yīng)的功能和方法。
如下代碼說明了子類繼承父類:
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ū)ο缶幊痰膮^(qū)別
相同點:都是把程序進行封裝、方便重復(fù)利用,提高效率。
不同點:函數(shù)重點是用于整體調(diào)用,一般用于一段不可更改的程序。僅僅是解決代碼重用性的問題。
而面向?qū)ο蟪鰜泶a重用性。還包括繼承、多態(tài)等。使用上更加靈活。
2 面向?qū)ο笾衧uper的作用?
Python中對象方法的定義很怪異,第一個參數(shù)一般都命名為self(相當于其它語言的this,比如:C#),用于傳遞對象本身,而在調(diào)用的時候則不
必顯式傳遞,系統(tǒng)會自動傳遞。
今天我們介紹的主角是super(), 在類的繼承里面super()非常常用, 它解決了子類調(diào)用父類方法的一些問題, 父類多次被調(diào)用時只執(zhí)行一次, 優(yōu)化了執(zhí)行邏輯,下面我們就來詳細看一下。
舉一個例子:
class Foo: def bar(self, message): print(message) Foo().bar("Hello, Python.") Hello, Python
當存在繼承關(guān)系的時候,有時候需要在子類中調(diào)用父類的方法,此時最簡單的方法是把對象調(diào)用轉(zhuǎn)換成類調(diào)用,需要注意的是這時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是允許多繼承的語言,如上所示的方法在多繼承時就需要重復(fù)寫多次,顯得累贅。為了解決這些問題,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)
方法的結(jié)果是一致的,實際上這兩種方法的內(nèi)部處理機制大大不同,當涉及多繼承情況時,就會表現(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()
結(jié)果:
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í)行了多次。
感謝各位的閱讀!關(guān)于“python面試題有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。