Python面向?qū)ο缶幊獭惻c對象
一、類與對象的概念
類即類別、種類,是面向?qū)ο笤O(shè)計最重要的概念,從一小節(jié)我們得知對象是特征與技能的結(jié)合體,而類則是一系列對象相似的特征與技能的結(jié)合體。
那么問題來了,先有的一個個具體存在的對象(比如一個具體存在的人),還是先有的人類這個概念,這個問題需要分兩種情況去看。
- 在現(xiàn)實世界中:肯定是先有對象,再有類。
世界上肯定是先出現(xiàn)各種各樣的實際存在的物體,然后隨著人類文明的發(fā)展,人類站在不同的角度總結(jié)出了不同的種類,比如
人類、動物類、植物類等概念。也就說,對象是具體的存在,而類僅僅只是一個概念,并不真實存在,比如你無法告訴我人類
具體指的是哪一個人。
- 在程序中:務(wù)必保證先定義類,后產(chǎn)生對象。
這與函數(shù)的使用是類似的:先定義函數(shù),后調(diào)用函數(shù),類也是一樣的:在程序中需要先定義類,后調(diào)用類。不一樣的是:調(diào)用
函數(shù)會執(zhí)行函數(shù)體代碼返回的是函數(shù)體執(zhí)行的結(jié)果,而調(diào)用類會產(chǎn)生對象,返回的是對象。
二、定義類
按照上述步驟,我們來定義一個類(我們站在老男孩學(xué)校的角度去看,在座的各位都是學(xué)生)
- 在現(xiàn)實世界中,先有對象,再有類
對象1:李坦克
特征:
學(xué)校=oldboy
姓名=李坦克
性別=男
年齡=18
技能:
學(xué)習(xí)
吃飯
睡覺
對象2:王大炮
特征:
學(xué)校=oldboy
姓名=王大炮
性別=女
年齡=38
技能:
學(xué)習(xí)
吃飯
睡覺
對象3:牛榴彈
特征:
學(xué)校=oldboy
姓名=牛榴彈
性別=男
年齡=78
技能:
學(xué)習(xí)
吃飯
睡覺
現(xiàn)實中的老男孩學(xué)生類
相似的特征:
學(xué)校=oldboy
相似的技能:
學(xué)習(xí)
吃飯
睡覺
- 在程序中,務(wù)必保證:先定義(類),后使用類(用來產(chǎn)生對象)
注意:
-
類中可以有任意python代碼,這些代碼在類定義階段便會執(zhí)行,因而會產(chǎn)生新的名稱空間,用來存放類的變量名與函數(shù)名,可以通過
OldboyStudent.__dict__
查看. - 類中定義的名字,都是類的屬性,點是訪問屬性的語法。
- 對于經(jīng)典類來說我們可以通過該字典操作類名稱空間的名字,但新式類有限制(新式類與經(jīng)典類的區(qū)別我們將在后續(xù)章節(jié)介紹)。
三、類的使用
- 引用類的屬性
OldboyStudent.school #查
OldboyStudent.school='Oldboy' #改
OldboyStudent.x=1 #增
del OldboyStudent.x #刪
- 調(diào)用類,或稱為實例化,得到程序中的對象
s1=OldboyStudent()
s2=OldboyStudent()
s3=OldboyStudent()
#如此,s1、s2、s3都一樣了,而這三者除了相似的屬性之外還各種不同的屬性,這就用到了__init__
-
__init__
方法
#注意:該方法是在對象產(chǎn)生之后才會執(zhí)行,只用來為對象進行初始化操作,可以有任意代碼,但一定不能有返回值
class OldboyStudent:
......
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
......
s1=OldboyStudent('李坦克','男',18) #先調(diào)用類產(chǎn)生空對象s1,然后調(diào)用OldboyStudent.__init__(s1,'李坦克','男',18)
s2=OldboyStudent('王大炮','女',38)
s3=OldboyStudent('牛榴彈','男',78)
四、對象的使用
#執(zhí)行__init__,s1.name='牛榴彈',很明顯也會產(chǎn)生對象的名稱空間可以用s2.__dict__查看,查看結(jié)果為
{'name': '王大炮', 'age': '女', 'sex': 38}
s2.name #查,等同于s2.__dict__['name']
s2.name='王三炮' #改,等同于s2.__dict__['name']='王三炮'
s2.course='python' #增,等同于s2.__dict__['course']='python'
del s2.course #刪,等同于s2.__dict__.pop('course')
五、補充說明
- 站的角度不同,定義出的類是截然不同的;
- 現(xiàn)實中的類并不完全等于程序中的類,比如現(xiàn)實中的公司類,在程序中有時需要拆分成部門類,業(yè)務(wù)類等;
- 有時為了編程需求,程序中也可能會定義現(xiàn)實中不存在的類,比如策略類,現(xiàn)實中并不存在,但是在程序中卻是一個很常見的類。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
