Python的類什麼時候用
物件導向最重要的概念就是類(Class)和例項(Instance),必須牢記類是抽象的模板,比如Student類,而例項是根據類建立出來的一個個具體的“物件”,每個物件都擁有相同的方法,但各自的資料可能不同。
仍以Student類為例,在Python中,定義類是透過class關鍵字:
class Student(object): pass
class後面緊接著是類名,即Student,類名通常是大寫開頭的單詞,緊接著是(object),表示該類是從哪個類繼承下來的,繼承的概念我們後面再講,通常,如果沒有合適的繼承類,就使用object類,這是所有類最終都會繼承的類。
定義好了Student類,就可以根據Student類建立出Student的例項,建立例項是透過類名+()實現的:
>>> bart = Student() >>> bart <__main__.Student object at 0x10a67a590> >>> Student <class '__main__.Student'>
可以看到,變數bart指向的就是一個Student的object,後面的0x10a67a590是記憶體地址,每個object的地址都不一樣,而Student本身則是一個類。
可以自由地給一個例項變數繫結屬性,比如,給例項bart繫結一個name屬性:
>>> bart.name = 'Bart Simpson' >>> bart.name 'Bart Simpson'
由於類可以起到模板的作用,因此,可以在建立例項的時候,把一些我們認為必須繫結的屬性強制填寫進去。透過定義一個特殊的__init__方法,在建立例項的時候,就把name,score等屬性綁上去:
class Student(object): def __init__(self, name, score): self.name = name self.score = score
注意到__init__方法的第一個引數永遠是self,表示建立的例項本身,因此,在__init__方法內部,就可以把各種屬性繫結到self,因為self就指向建立的例項本身。
有了__init__方法,在建立例項的時候,就不能傳入空的引數了,必須傳入與__init__方法匹配的引數,但self不需要傳,Python直譯器自己會把例項變數傳進去:
>>> bart = Student('Bart Simpson', 59) >>> bart.name 'Bart Simpson' >>> bart.score 59
和普通的函式相比,在類中定義的函式只有一點不同,就是第一個引數永遠是例項變數self,並且,呼叫時,不用傳遞該引數。除此之外,類的方法和普通函式沒有什麼區別,所以,你仍然可以用預設引數、可變引數和關鍵字引數。
總結
類是建立例項的模板,而例項則是一個一個具體的物件,各個例項擁有的資料都互相獨立,互不影響; 方法就是與例項繫結的函式,和普通函式不同,方法可以直接訪問例項的資料; 透過在例項上呼叫方法,我們就直接操作了物件內部的資料,但無需知道方法內部的實現細節。 和靜態語言不同,Python允許對例項變數繫結任何資料,也就是說,對於兩個例項變數,雖然它們都是同一個類的不同例項,但擁有 的變數名稱都可能不同:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2480/viewspace-2835678/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python中什麼時候使用自定義類Python
- C++中什麼時候用move,什麼時候用forward?C++Forward
- 舉例說明你什麼時候會用抽象類,什麼時候更願意使用介面?抽象
- 什麼時候採用socket通訊,什麼時候採用http通訊HTTP
- 什麼時候該用vuex?Vue
- 什麼時候該用MongoDB?MongoDB
- python什麼時候縮排Python
- EJB2.0中什麼時候用local interface,什麼時候用remote interface (轉)REM
- 什麼時候用有狀態session bean,什麼時候用無狀態session bean (轉)SessionBean
- 用Python預測你的花唄可以用到什麼時候Python
- 什麼時候用linux系統多Linux
- python為什麼用類Python
- 什麼時候釋出
- 什麼時候呼叫layoutSubviewsView
- session是什麼時候建立的Session
- jquery裡面的$(this)和this都什麼時候用,有什麼區別jQuery
- 當我在玩python的時候我玩些什麼Python
- 新版什麼時候釋出?
- 到底什麼時候使用mqMQ
- TRIZ課堂—什麼時候可以用分割原理?
- 什麼時候該採用結對程式設計?程式設計
- Python會在什麼時候被其他語言取代Python
- win11什麼時候釋出的 win11什麼時候推送詳細介紹
- request.getParameter("name")什麼時候獲取的引數是null,什麼時候為""空字串Null字串
- Haskell程式設計精華:什麼時候該註釋,什麼時候不該註釋Haskell程式設計
- 什麼時候才是微服務拆分的最佳時機?微服務
- beego 什麼時候支援grpcGoRPC
- Mybatis什麼時候需要宣告jdbcType?MyBatisJDBC
- 什麼時候使用z-index?Index
- 什麼時候使用 Lambda 函式?函式
- 什麼時候Linux才能完美?Linux
- 什麼時候Haskell快於CHaskell
- session的狀態什麼時候是snipedSession
- SQL Server-聚焦什麼時候用OPTION(COMPILE)呢?SQLServerCompile
- 深入理解go的slice和到底什麼時候該用sliceGo
- 什麼是介面?為什麼使用介面? 什麼時候使用介面?(轉)
- oracle commit的時候究竟發生了什麼OracleMIT
- 什麼時候 AngularJS 會超越 jQueryAngularJSjQuery