8.類定義、屬性、初始化和析構

        類定義       

類 是一個獨立存放變量(屬性/方法)的空間python

封裝:函數

類能夠把各類對象組織在一塊兒,做爲類的屬性,經過 . (點)運算符來調用類中封裝好的對象spa

屬性:調試

變量在類中稱爲屬性,可是類中的屬性不單單隻包含變量,函數等其餘的對象也能夠做爲類的屬性code

類的定義:關鍵字class

是一類事物的抽象,不是真是存在的。 描繪了該類事物的共性, 例如:「人類」、「貓類」、「狗類對象

建立實例:

某類事物的具體個體,是該類事物的具體表現,它是真實存在的。 例如:「炎志」是具體的某個「人」 ''墨染''是某個具體的’人’ 「加菲貓」是具體的某個「貓」 ''湯姆貓'' 是某個具體的’貓‘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()

炎志
炎志走向戰場
炎志使用了技能:砍一刀
=========================================
墨染
墨染走向戰場
墨染使用了技能:砍一刀

  初始化和析構 

1、初始化」特殊方法

在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
墨染走向戰場
墨染使用了技能:砍一刀

2、__init__ 的參數傳遞過程

 

3、基於變量計數的對象銷燬機制

當沒有一個變量指向某個對象的時候,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() 

炎志向前移動兩步
炎志 被銷燬了
墨染向前移動兩步
墨染使用了一個技能
墨染 被銷燬了
相關文章
相關標籤/搜索