溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python類的的使用

發(fā)布時(shí)間:2020-07-23 04:12:07 來源:網(wǎng)絡(luò) 閱讀:248 作者:射雕英雄k 欄目:編程語言

首先定義一個(gè)名為Student的類

class Student:
    #__init__函數(shù)是類的構(gòu)造函數(shù),在實(shí)例化的時(shí)候做一些初始化工作
    num = 1123  #類變量
    name = 'wu'
    def __init__(self, name,age):
        self.name = name #實(shí)例變量,作用域是實(shí)例本身
        self.age = age

    def get_score(self): #類方法 
        print("score = 99")
上邊這個(gè)類Student是類名類名一般要大寫這個(gè)是規(guī)范。
有幾個(gè)注意的點(diǎn):
1. 類的屬性
2. 實(shí)例化
3. 類變量與實(shí)例變量(修改類變量)
4. 類的__init__方法(也叫構(gòu)造函數(shù))
5. 類變量的作用
6. 析構(gòu)函數(shù)
7. 私有屬性
8. 私有方法

1.類的屬性
類的屬性分靜態(tài)屬性和動(dòng)態(tài)屬性,類里的實(shí)例變量和類變量都是靜態(tài)屬性。類里邊的方法是類的動(dòng)態(tài)屬性。
2 . 實(shí)例化

p1 = Student("haha",20) #實(shí)例化得到p1這個(gè)對(duì)象

3 . 類變量與實(shí)例變量(修改類變量)

直接放在類里的是類變量,在__init__函數(shù)里的是實(shí)例變量
類變量相當(dāng)于一個(gè)默認(rèn)值, 當(dāng)類變量跟實(shí)例變量是同一個(gè)變量名的時(shí)候 
對(duì)于當(dāng)前這個(gè)對(duì)象來說實(shí)例變量覆蓋了類變量的值,也就是說優(yōu)先找實(shí)例變量,
只有在實(shí)例變量不存在的情況下才會(huì)找類變量
print(p1.num,p1.name)
這個(gè)語句輸出:1123 haha
類變量有一個(gè)name 實(shí)例變量也有一個(gè)name,先找實(shí)例變量
這個(gè)時(shí)候如果修改類變量num的值
先實(shí)例化一個(gè)變量 p2 = Student("xixi",30)
p1.num = 10

print(p1.num,p1.name)
print(p2.num,p2.name)
結(jié)果:
10 haha
1123 xixi
類變量并沒有改變,這里的 p1.num = 10相當(dāng)于給p1這個(gè)對(duì)象定義了一個(gè)實(shí)例屬性num
修改了值修改了值,并不會(huì)影響其他對(duì)象。因?yàn)樗淖饔糜蚴菍?shí)例本身
要是真的想修改類變量應(yīng)該怎么寫呢?
Student.num = 20這樣就修改了類變量的值

4 . 類的init函數(shù)

類的__init__方法也叫構(gòu)造函數(shù),
什么是構(gòu)造函數(shù),是一種特殊的函數(shù)。 主要用來在創(chuàng)建對(duì)象時(shí)初始化對(duì)象,
即為對(duì)象成員變量賦初始值。

5.類變量的作用

定義公共屬性,這樣在對(duì)象實(shí)例化的時(shí)候,就不用再copy一份數(shù)據(jù),節(jié)省內(nèi)存開銷。

6.析構(gòu)函數(shù)

類的__del__方法是析構(gòu)函數(shù),在c和c++中沒有垃圾回收機(jī)制,
所以程序員寫代碼時(shí)必須定義析構(gòu)函數(shù)來做內(nèi)存的釋放工作。
而在java和python中,本身就實(shí)現(xiàn)了垃圾回收機(jī)制,java中由java虛擬機(jī)來回收內(nèi)存,python 中則由python解釋器來回收資源。
所以在python當(dāng)中默認(rèn)不需要定義析構(gòu)函數(shù),
Python 會(huì)提供默認(rèn)析構(gòu)函數(shù)。如果有特殊需要可以定義一個(gè)__del__方法
在實(shí)例對(duì)象調(diào)用結(jié)束時(shí)做一些掃尾工作。
析構(gòu)函數(shù)會(huì)在對(duì)象作用域中調(diào)用結(jié)束時(shí)自動(dòng)調(diào)用來釋放內(nèi)存,無需手動(dòng)調(diào)用。
如果要顯式的調(diào)用析構(gòu)函數(shù),可以使用del關(guān)鍵字: del obj
這里del調(diào)用其實(shí)不是直接去釋放內(nèi)存,而是減少引用計(jì)數(shù),
由垃圾回收機(jī)制來回收內(nèi)存

7.私有屬性

類的屬性分靜態(tài)屬性和動(dòng)態(tài)屬性,通常我們說類的屬性通常都是指類的靜態(tài)屬性。
現(xiàn)在來說私有屬性,定義類的私有屬性就是屬性前面加上__雙下劃線
私有屬性在外面是不能訪問的也即類的對(duì)象是不能直接調(diào)用的屬性。
可以在類的內(nèi)部訪問并修改。
class Person:
    def __init__(self,name,age,stature):
        self.name = name
        self.age = age
        self.__stature = 1.7 #私有屬性

    def get_stature(self):
        return self.__stature

p1 = Person("fransics",21,1.9)
#print(p1.__stature) 
print(p1.get_stature())
這個(gè)代碼片里直接print私有屬性__stature是訪問不到的會(huì)報(bào)錯(cuò)。而可以通過類方法在內(nèi)部訪問并返回。

8.私有方法

前面說過了私有屬性,私有方法也類似。定義的時(shí)候可以通過函數(shù)名之前加__來完成定義。同樣是不能在外部訪問,只能內(nèi)部訪問。
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI