摘要:面向?qū)ο笞钪匾母拍顟?yīng)該就是類和實(shí)例了。記得以前學(xué)習(xí)的時(shí)候,有一個(gè)比較簡(jiǎn)單的例子來(lái)解釋類和實(shí)例。構(gòu)造函數(shù)類中可以定義一個(gè)構(gòu)造函數(shù)。構(gòu)造函數(shù)的意思就是類在創(chuàng)建的時(shí)候會(huì)執(zhí)行的函數(shù)。在實(shí)例中通過(guò)構(gòu)造函數(shù)添加的或者在類外動(dòng)態(tài)添加的屬性可以。
面向?qū)ο笞钪匾母拍顟?yīng)該就是類(class)和實(shí)例(instance)了。記得以前學(xué)習(xí)java的時(shí)候,有一個(gè)比較簡(jiǎn)單的例子來(lái)解釋類和實(shí)例。
在汽車制造過(guò)程中,我們需要先設(shè)計(jì)圖紙,讓后再根據(jù)圖紙來(lái)制造實(shí)際的汽車。類就相當(dāng)于圖紙,而實(shí)例則是實(shí)際的汽車。一張圖紙可以造出很多汽車,剛造出的汽車是一樣的,但是后續(xù)可以進(jìn)行個(gè)性化的改裝。
python可以根據(jù)class在內(nèi)存中創(chuàng)建多個(gè)實(shí)例,每個(gè)實(shí)例可以獨(dú)立地添加和修改方法和屬性。
class Car(Vehicle): pass
我們來(lái)說(shuō)明一下,class關(guān)鍵詞來(lái)聲明這是一個(gè)類,緊接著就是類名。后接一個(gè)(),里面是該類所繼承的父類。
在2.7中,一個(gè)類如果沒(méi)有繼承其它類,則可以另其繼承object類。那么這樣定義的就是一個(gè)new style object,即新式類。
如果不聲明繼承自何類,那么定義的則是經(jīng)典類。
例如:
# 定義新式類 class Student(object): pass # 定義經(jīng)典類 class Student2: pass
新式類和經(jīng)典類的區(qū)別出了寫法不一樣外,還存在其它區(qū)別:
新式類的類型是type,經(jīng)典類的類型是classobj。新式類的出現(xiàn)就是為了將所有類的類型統(tǒng)一為type。
對(duì)于多繼承,繼承搜索的順序發(fā)生了改變。(這里不懂)
默認(rèn)屬性發(fā)生了改變
可能還有其它
Python 3.x以上版本所有的類均是新式類,不需要顯式地繼承object。
__init__構(gòu)造函數(shù)類中可以定義一個(gè)構(gòu)造函數(shù)__init__。構(gòu)造函數(shù)的意思就是類在創(chuàng)建的時(shí)候會(huì)執(zhí)行的函數(shù)。__init__函數(shù)的第一參數(shù)是self,指實(shí)例本身。__init__函數(shù)還可以有多個(gè)參數(shù),這些參數(shù)需要在實(shí)例創(chuàng)建的時(shí)候傳入。
例如:
class Student(object): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender
__init__函數(shù)經(jīng)常用于對(duì)實(shí)例屬性進(jìn)行初始化。
類中的函數(shù)類中的函數(shù)也叫做方法。方法與其它函數(shù)有所區(qū)別,即方法的第一個(gè)參數(shù)永遠(yuǎn)是self,即實(shí)例本身。
創(chuàng)建實(shí)例后,在調(diào)用方法是,并不需要傳入實(shí)例,因?yàn)榫幾g器為自動(dòng)為我們加入實(shí)例。例如:
class Student(object): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender # 方法的第一個(gè)參數(shù)是self def print_name(self): print self.name student = Student("charlie", 20, "male") #調(diào)用函數(shù)的時(shí)候,并不需要手動(dòng)傳入實(shí)例student student.print_name()兩個(gè)特殊的函數(shù)
classmethod和staticmethod。
簡(jiǎn)單粗淺地說(shuō),可以理解成:
classmethod的是定義一些僅僅跟類有關(guān),但是跟實(shí)例無(wú)關(guān)的方法。
staticmethod是一些跟類有關(guān)系的功能,但是其具體的實(shí)現(xiàn)卻又不需要用到類或者實(shí)例的參與。staticmethod叫做靜態(tài)方法。
更多解釋和例子,可以閱讀知乎上的回答:https://www.zhihu.com/questio...
類的屬性屬性就更加好理解了。
例如我們?cè)O(shè)計(jì)一張制造冰箱的圖紙,我們除了定義冰箱的功能(類的方法)外,還需要定義冰箱的顏色、長(zhǎng)、寬、高、等屬性。類也一樣。
class Fridge(object): color = "yellow" height = 120 width = 30 food = "fish" def storage(self): print "keep %s fresh" % self.food fridge = Fridge() fridge.storage()類的封裝性
上面我們講了這么多類的特性,其實(shí)類就是一個(gè)數(shù)據(jù)類型。我們把一種數(shù)據(jù)類型封裝成一個(gè)類。
例如一個(gè)學(xué)生具有姓名、年齡、性別等屬性,另外他也有書寫姓名、讀書識(shí)字等功能。我們可以把一個(gè)Student所有的屬性和功能看成一個(gè)整體,那么這就是一個(gè)類。這個(gè)類就是與python中內(nèi)置的其它數(shù)據(jù)類型一樣的數(shù)據(jù)類型,只不過(guò)這是我們自定義的,叫Student。
創(chuàng)建實(shí)例的方法十分簡(jiǎn)單。即:
student = Student(括號(hào)內(nèi)傳入在__init__函數(shù)中定義的參數(shù))
python是一門動(dòng)態(tài)語(yǔ)言。創(chuàng)建好的實(shí)例可以自由地添加屬性。在類中聲明的read-only的屬性,在實(shí)例中不能del。在實(shí)例中通過(guò)構(gòu)造函數(shù)添加的或者在類外動(dòng)態(tài)添加的屬性可以del。
類中的read-only屬性只能通過(guò)類屬性的形式刪除。
class Fridge(object): color = "yellow" width = 20 def __init__(self, height): self.height = height def storage(self): print "keep %s fresh" fridge = Fridge(100) fridge.name = "Haier" del fridge.color # AttributeError 報(bào)錯(cuò) del fridge.height del fridge.name del Fridge.width
怎么給實(shí)例或類動(dòng)態(tài)添加方法?先挖個(gè)坑,學(xué)習(xí)了再寫。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38273.html
摘要:前言最近跟著流暢的和學(xué)習(xí),看到裝飾器部分,有些頭大倒不是因?yàn)楦拍铍y以理解,而是書和網(wǎng)上文章中有些地方有些矛盾之處在簡(jiǎn)單學(xué)習(xí)和實(shí)踐之后,整理出我對(duì)裝飾器的理解如下裝飾器的定義在不同語(yǔ)境下,裝飾器有不一樣的含義,我大致認(rèn)為有種定義一種把另一個(gè)對(duì) 前言 最近跟著《流暢的Python》和《Python Cookbook》學(xué)習(xí),看到裝飾器部分,有些頭大倒不是因?yàn)楦拍铍y以理解,而是書和網(wǎng)上文章中有...
摘要:一的基本語(yǔ)法縮進(jìn)統(tǒng)一個(gè)或者個(gè)空格。中的數(shù)據(jù)類型中有個(gè)標(biāo)準(zhǔn)類型數(shù)字字符串列表元組集合字典數(shù)字復(fù)數(shù)在中,只有一種整數(shù)類型,表示長(zhǎng)整型。如則會(huì)顯示,并不是換行??招信c代碼縮進(jìn)不同,空行并不是語(yǔ)法的一部分。我們將首行及后面的代碼組稱為一個(gè)子句。 一、python3的基本語(yǔ)法 1、縮進(jìn)統(tǒng)一(1個(gè)tab或者4個(gè)空格)。 for i in range(10): print (i) ...
摘要:本人很少寫代碼一般都是用的去年時(shí)用寫過(guò)一些收集系統(tǒng)信息的工具當(dāng)時(shí)是邊看手冊(cè)邊寫的如今又要用來(lái)寫一個(gè)生成的工具就又需要查看手冊(cè)了至于為什么不用寫那是因?yàn)榈膸?kù)不兼容永中在這里不得不說(shuō)雖然很火但是一些庫(kù)還是不如多不如兼容性好為了避免以后再出這種事 Python3 Study Notes 本人很少寫 python 代碼, 一般都是用 go 的, 去年時(shí)用 python 寫過(guò)一些收集系統(tǒng)信息的工...
一、類(PT第九章) 9.3.4 方法對(duì)象 class MyClass: A simple example class i = 12345 def f(self): return hello world xf = x.f while True: print xf() 方法的特別之處在于實(shí)例對(duì)象被作為函數(shù)的第一個(gè)參數(shù)傳給了函數(shù)。在我們的示例中,調(diào)用x...
閱讀 2998·2021-11-23 09:51
閱讀 2820·2021-11-11 16:55
閱讀 2935·2021-10-14 09:43
閱讀 1403·2021-09-23 11:22
閱讀 1045·2019-08-30 11:04
閱讀 1674·2019-08-29 11:10
閱讀 970·2019-08-27 10:56
閱讀 3125·2019-08-26 12:01