面向對象設計—類和對象(一)(包含構造函數,析構函數,實例屬性和類屬性,方法的動態性)(超詳細的學習筆記)

類和對象:

一、定義和使用類:

(1)類定義

定義:

Python的類的方法和普通的函數有一個很明顯的區別,在類的方法必須要有一個額外參數self,但在調用這個方法的時候不必爲這個參數賦值,系統會自動的把對象的的地址傳遞給self。

Python使用class關鍵字來定義類,class關鍵字之後是一個空格,然後是類的名字,再然後是一個冒號。

class 類名:
      屬性(成員變量)
      屬性
      成員函數(成員方法)

代碼演示如下:

class Person:
    num=1
    def SayHello(self):
        print("Good!")

注意:類的成員函數必須有一個參數self且必須位於參數列表的開頭。self就代表類的實例(對象)自身,可以使用self引用類的屬性和成員函數。

(2)對象定義

定義:

對象是類的實例,只有定義了具體的對象,並通過“對象名.成員”的方式才能訪問其中的數據成員或成員方法。語法如下:
對象名=類名()

代碼演示如下:

class Person:
    num=1
    def SayHello(self):
        print("Good!")
a=Person()
a.SayHello()

結果:

Good!

二、構造函數:

(1)__ init__()方法的要點:

1)名稱必須固定,即要以兩個下劃線“_”開頭和結束。

2)第一個參數固定,必須爲:self。self指的就是剛剛創建好的實例對象。

3)一個類定義了__init__()方法以後,類實例化時就會自動爲新生的類實例調用__init__()方法。

4)構造函數一般用於完成對象數據成員設置初值或進行其他必要的初始化工作,如果用戶未涉及構造函數,Python將提供一個默認的構造函數。

(2)代碼演示如下:

class Student:
    def __init__(self,name,age):
        self.n=name
        self.a=age
x=Student("小明",20)
print(x.n)
print(x.a)

結果:

小明
20

三、析構函數:

Python中類的析構函數是__del__,用來釋放對象佔用的資源。

代碼演示:

class Student:
    def __init__(self,name,age):
        self.n=name
        self.a=age
    def __del__(self):
        print("不存在了")
x=Student("小明",20)
print(x.n)
print(x.a)
print(x)
del x

結果:

小明
20
<__main__.Student object at 0x03348C10>
不存在了

注意:在刪除x對象變量之前,x是存在的,在內存中的標識爲0x03348C10,執行del x語句後,x對象變量不存在了,系統自動調用析構函數,所以出現“不存在了”。

四、實例屬性和類屬性:

(1)實例屬性

1、實例屬性一般在__init__()方法中通過如下代碼定義:
self.實例屬性名=初始值
2、在本類的其他實例方法中,也是通過self進行訪問:
self.實例屬性名。

(2)類屬性

1、類屬性是從屬於“類對象”的屬性,也成爲“類變量”,由於,類屬性從屬於類對象,可以被所有實例對象共享。
2、類屬性的定義方式:

 clas 類名:
      類變量名=初始值

(3)代碼演示

class Student:
    num=1                           #類屬性
    def __init__(self,name,age):    #構造函數
        self.n=name                 #實例屬性
        self.a=age
    def print(self):             #成員函數
        print("姓名:{}\n年齡:{}".format(self.n,self.a))
    def printnum(self):             #成員函數
        print(Student.num)          #由於是類屬性,所以不寫self.num
x=Student("小明",20)
x.print()
Student.num=2                       #修改類屬性
x.printnum()

結果:

姓名:小明
年齡:20
2

五、方法的動態性

在Python中比較特殊的是,可以動態地爲類和對象增加成員。

(1)代碼:

class Student:
    def work(self):
        print("工作掙錢")
def play(s): #注意與work區別,class裏沒有這個函數,此時無法用通過s.play()調用
    print("{}愛玩遊戲".format(s))
Student.play=play#增加了此語句便可以通過s.play()調用了
s=Student()
s.work()
s.play()

結果:

工作掙錢
<__main__.Student object at 0x032B8C10>愛玩遊戲

(2)補充:

1、“實例對象”指的是已經實例化的對象變量,
在這裏插入圖片描述所以,”愛玩遊戲“前面那個地址是Student的(也就是s)
面向對象設計—類和對象(二)(超詳細的學習筆記)

補充:

我總結我所有python筆記於一篇博客裏:
點擊即可進入Python學習筆記大總結(我把我所有python筆記做了總結和學習順序,點擊即可進入相關博客。希望可以便於你們閱讀)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章