8.类定义、属性、初始化和析构
? ? ? ? 類定義? ? ? ?
類 是一個(gè)獨(dú)立存放變量(屬性/方法)的空間
封裝:
類可以把各種對(duì)象組織在一起,作為類的屬性,通過(guò) . (點(diǎn))運(yùn)算符來(lái)調(diào)用類中封裝好的對(duì)象
屬性:
變量在類中稱為屬性,但是類中的屬性不僅僅只包含變量,函數(shù)等其他的對(duì)象也可以作為類的屬性
類的定義:關(guān)鍵字class
是一類事物的抽象,不是真是存在的。 描繪了該類事物的共性, 例如:“人類”、“貓類”、“狗類
創(chuàng)建實(shí)例:
某類事物的具體個(gè)體,是該類事物的具體表現(xiàn),它是真實(shí)存在的。 例如:“炎志”是具體的某個(gè)“人” ''墨染''是某個(gè)具體的’人’ “加菲貓”是具體的某個(gè)“貓” ''湯姆貓'' 是某個(gè)具體的’貓‘
實(shí)例名 = 類名()
?
一個(gè)“實(shí)例”的“特征”,就是“屬性”
名字不一樣, 身高不一樣, 年齡不一樣, 大小也不一樣
類屬性和實(shí)例屬性
類屬性:在類里面定義的屬性,可以通過(guò)類和實(shí)例訪問(wèn)
實(shí)例屬性:通過(guò)實(shí)例定義的屬性,只能通 過(guò)實(shí)例訪問(wèn)
類的私有屬性
在python中有兩私有屬性,分別是在屬性前加 一個(gè)下?lián)Q線(_) 和 兩個(gè) 下劃線(__)
_x: 意義在于喚起用戶的注意,看成私有屬性,類對(duì)象和子類可以訪問(wèn)
__xx:雙前置下劃線,避免與子類中的屬性命名沖突,無(wú)法在外部直接訪問(wèn)
(名字重整所以訪問(wèn)不到)
?
私有屬性: 在 Python 中, _ 和 __ 的使用 更多的是一種規(guī)范/約定, 沒(méi)有真正限制的目的
? ? ? 方法? ? ? ?
類中的方法,就是函數(shù)
通常,將默認(rèn)會(huì)傳入的那個(gè)參數(shù)命名為self,用來(lái)表示調(diào)用這個(gè)方法的實(shí)例對(duì)象本身。
方法總是定義在類中的,但是卻叫“實(shí)例方法”,因?yàn)樗硎驹擃愃袑?shí)例所共有的行為
方法的調(diào)用和屬性調(diào)用一樣,通過(guò)點(diǎn)操作符調(diào)用,傳參和函數(shù)傳參一樣
class Hero(object):def move(self): #self代表實(shí)例本身,那個(gè)實(shí)例調(diào)用就代表那個(gè)實(shí)例print("%s走向戰(zhàn)場(chǎng)"%self.name) #yanzhi.name #moran.namedef skill(self):print("%s使用了技能:砍一刀"%self.name) #在類中定義的方法叫實(shí)例方法不叫類方法yanzhi = Hero() moran = Hero() yanzhi.name = '炎志' moran.name = '墨染' print(yanzhi.name) yanzhi.move() yanzhi.skill() print("=========================================") print(moran.name) moran.move() moran.skill()炎志 炎志走向戰(zhàn)場(chǎng) 炎志使用了技能:砍一刀 ========================================= 墨染 墨染走向戰(zhàn)場(chǎng) 墨染使用了技能:砍一刀? 初始化和析構(gòu)?
一、初始化”特殊方法
在Python中有很多以雙下劃線開(kāi)頭且以雙下劃線結(jié)尾的固定方法。
他們會(huì)在特定的時(shí)機(jī)被觸發(fā)執(zhí)行。
__init__ 就是其中之一,它會(huì)在實(shí)例化之后自動(dòng)被調(diào)用。以完成實(shí)例的初始化。
class Hero(object):def __init__(self,name,HP):self.name = nameself.HP = HPdef move(self): #self代表實(shí)例本身,那個(gè)實(shí)例調(diào)用就代表那個(gè)實(shí)例print("%s走向戰(zhàn)場(chǎng)"%self.name) #yanzhi.name #moran.namedef skill(self):print("%s使用了技能:砍一刀"%self.name) #在類中定義的方法叫實(shí)例方法不叫類方法 yanzhi = Hero('炎志',3000) moran = Hero('墨染',2500) print(yanzhi.name) print(yanzhi.HP) yanzhi.move() yanzhi.skill() print("=========================================") print(moran.name) print(moran.HP) moran.move() moran.skill()炎志 3000 炎志走向戰(zhàn)場(chǎng) 炎志使用了技能:砍一刀 ========================================= 墨染 2500 墨染走向戰(zhàn)場(chǎng) 墨染使用了技能:砍一刀二、__init__ 的參數(shù)傳遞過(guò)程
?
三、基于變量計(jì)數(shù)的對(duì)象銷毀機(jī)制
當(dāng)沒(méi)有一個(gè)變量指向某個(gè)對(duì)象的時(shí)候,Python會(huì)自動(dòng)銷毀這個(gè)對(duì)象,以便回收內(nèi)存空間。
del 關(guān)鍵字,可以刪除一個(gè)變量的指向。
?__del__”就是一個(gè)析構(gòu)函數(shù)了,當(dāng)使用del 刪除對(duì)象時(shí),會(huì)調(diào)用他本身的析構(gòu)函數(shù)。 提示開(kāi)發(fā)者,對(duì)象被銷毀了,方便調(diào)試。 進(jìn)行以寫必要的清理工作。
#代碼運(yùn)行完自動(dòng)銷毀 class Hero(object):def __init__(self,name,HP):self.name = nameself.HP = HPdef __del__(self):print(self.name,'被銷毀了')def move(self): #self代表實(shí)例本身,那個(gè)實(shí)例調(diào)用就代表那個(gè)實(shí)例print("%s走向戰(zhàn)場(chǎng)"%self.name) #yanzhi.name #moran.namedef skill(self):print("%s使用了技能:砍一刀"%self.name) #在類中定義的方法叫實(shí)例方法不叫類方法 yanzhi = Hero('炎志',3000) moran = Hero('墨染',2500) print(yanzhi.name) print(yanzhi.HP) yanzhi.move() yanzhi.skill() print("=========================================") print(moran.name) print(moran.HP) moran.move() moran.skill()炎志 3000 炎志走向戰(zhàn)場(chǎng) 炎志使用了技能:砍一刀 ========================================= 墨染 2500 墨染走向戰(zhàn)場(chǎng) 墨染使用了技能:砍一刀 墨染 被銷毀了 炎志 被銷毀了 class Hero():def __init__(self,name,HP):self.name = nameself.HP = HPdef __del__(self):print(self.name,'被銷毀了')def move(self):print('%s向前移動(dòng)兩步'%self.name)def skill(self):print('%s使用了一個(gè)技能'%self.name)yanzhi = Hero('炎志',3000) moran = Hero('墨染',3000) yanzhi.move() del yanzhi #主動(dòng)銷毀 moran.move() moran.skill() 炎志向前移動(dòng)兩步 炎志 被銷毀了 墨染向前移動(dòng)兩步 墨染使用了一個(gè)技能 墨染 被銷毀了?
轉(zhuǎn)載于:https://www.cnblogs.com/lyh-520/p/9293779.html
總結(jié)
以上是生活随笔為你收集整理的8.类定义、属性、初始化和析构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IAR stm8 调试时无法看到局部变量
- 下一篇: SAP HANA企业级培训系列课程第一部