類 是一個獨立存放變量(屬性/方法)的空間python
封裝:函數
類能夠把各類對象組織在一塊兒,做爲類的屬性,經過 . (點)運算符來調用類中封裝好的對象spa
屬性:調試
變量在類中稱爲屬性,可是類中的屬性不單單隻包含變量,函數等其餘的對象也能夠做爲類的屬性code
是一類事物的抽象,不是真是存在的。 描繪了該類事物的共性, 例如:「人類」、「貓類」、「狗類對象
某類事物的具體個體,是該類事物的具體表現,它是真實存在的。 例如:「炎志」是具體的某個「人」 ''墨染''是某個具體的’人’ 「加菲貓」是具體的某個「貓」 ''湯姆貓'' 是某個具體的’貓‘blog
實例名 = 類名()內存
一個「實例」的「特徵」,就是「屬性」開發
名字不同, 身高不同, 年齡不同, 大小也不同it
類屬性:在類裏面定義的屬性,能夠經過類和實例訪問
實例屬性:經過實例定義的屬性,只能通 過實例訪問
在python中有兩私有屬性,分別是在屬性前加 一個下換線(_) 和 兩個 下劃線(__)
_x: 意義在於喚起用戶的注意,當作私有屬性,類對象和子類能夠訪問
__xx:雙前置下劃線,避免與子類中的屬性命名衝突,沒法在外部直接訪問
(名字重整因此訪問不到)
私有屬性: 在 Python 中, _ 和 __ 的使用 更多的是一種規範/約定, 沒有真正限制的目的
類中的方法,就是函數
一般,將默認會傳入的那個參數命名爲self,用來表示調用這個方法的實例對象自己。
方法老是定義在類中的,可是卻叫「實例方法」,由於它表示該類全部實例所共有的行爲
方法的調用和屬性調用同樣,經過點操做符調用,傳參和函數傳參同樣
class Hero(object): def move(self): #self表明實例自己,那個實例調用就表明那個實例 print("%s走向戰場"%self.name) #yanzhi.name #moran.name def skill(self): print("%s使用了技能:砍一刀"%self.name) #在類中定義的方法叫實例方法不叫類方法 yanzhi = Hero() moran = Hero() yanzhi.name = '炎志' moran.name = '墨染' print(yanzhi.name) yanzhi.move() yanzhi.skill() print("=========================================") print(moran.name) moran.move() moran.skill() 炎志 炎志走向戰場 炎志使用了技能:砍一刀 ========================================= 墨染 墨染走向戰場 墨染使用了技能:砍一刀
在Python中有不少以雙下劃線開頭且以雙下劃線結尾的固定方法。
他們會在特定的時機被觸發執行。
__init__ 就是其中之一,它會在實例化以後自動被調用。以完成實例的初始化。
class Hero(object): def __init__(self,name,HP): self.name = name self.HP = HP def move(self): #self表明實例自己,那個實例調用就表明那個實例 print("%s走向戰場"%self.name) #yanzhi.name #moran.name def skill(self): print("%s使用了技能:砍一刀"%self.name) #在類中定義的方法叫實例方法不叫類方法 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 炎志走向戰場 炎志使用了技能:砍一刀 ========================================= 墨染 2500 墨染走向戰場 墨染使用了技能:砍一刀
當沒有一個變量指向某個對象的時候,Python會自動銷燬這個對象,以便回收內存空間。
del 關鍵字,能夠刪除一個變量的指向。
__del__」就是一個析構函數了,當使用del 刪除對象時,會調用他自己的析構函數。 提示開發者,對象被銷燬了,方便調試。 進行以寫必要的清理工做。
#代碼運行完自動銷燬 class Hero(object): def __init__(self,name,HP): self.name = name self.HP = HP def __del__(self): print(self.name,'被銷燬了') def move(self): #self表明實例自己,那個實例調用就表明那個實例 print("%s走向戰場"%self.name) #yanzhi.name #moran.name def skill(self): print("%s使用了技能:砍一刀"%self.name) #在類中定義的方法叫實例方法不叫類方法 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 炎志走向戰場 炎志使用了技能:砍一刀 ========================================= 墨染 2500 墨染走向戰場 墨染使用了技能:砍一刀 墨染 被銷燬了 炎志 被銷燬了
class Hero(): def __init__(self,name,HP): self.name = name self.HP = HP def __del__(self): print(self.name,'被銷燬了') def move(self): print('%s向前移動兩步'%self.name) def skill(self): print('%s使用了一個技能'%self.name) yanzhi = Hero('炎志',3000) moran = Hero('墨染',3000) yanzhi.move() del yanzhi #主動銷燬 moran.move() moran.skill() 炎志向前移動兩步 炎志 被銷燬了 墨染向前移動兩步 墨染使用了一個技能 墨染 被銷燬了