Python學習(15):面向對象(1)-類與對象

一、關於Python類的說明

1.類是現實世界或者思維世界中的實體在計算機中的反饋,它可以將數據以及這些數據的操作封裝在一起。
2.類是創建實例的模板,而實例則是一個一個具體的對象,各個實例擁有的數據都互相獨立,互不影響;
3.Python的所有類型實例都是對象,而我們自定義的對象類型就是面向對象中的類;
4.類是對象的抽象,對象是類的實例;
5.面向對象的三大特性:封裝、繼承和多態;

二、關於類的使用示例

下面演示了一個類的定義和使用,關鍵代碼如下:

classStudent():

    #類變量:定義在這裏是類變量,可以由類名直接調用,也可以由對象來調用
    status = "類變量:學生身份"
    area = "類變量:學校"
    motto = "類變量:好好學習,天天向上"
    sum  = 0

    #構造函數:特殊的實例方法(帶有"_init__"),用以創建實例對象
    def __init__(self,name,gender1="男", age=18,score= 0):
        #實例變量:構造函數中通過self綁定,設置成員變量
        self.name= name
        self.gender = gender1
        self.age = age

        #實例方法內訪問實例變量,需要使用self,對比下面四行代碼
        #第二行代碼,雖然不使用self也打印了相同的值,但其實打印的是形參name
        #比如修改形參爲gender1後再直接打印gender,就會顯示報錯
        print(self.name) 
        print(name)      
        #print(self.gender)
        #print(gender)   #'gender' is not defined,報錯

        #實例方法中訪問類變量的兩種方法
        print(Student.status)    
        print(self.__class__.status)


    #實例方法:第一個參數必須是self
    def introSelf(self):
        print("------我是一名學生,我的信息是:------")
        print("我的名字:"+ self.name) #訪問實例變量
        print("我的性別:"+ self.gender)
        print("我的年齡"+ str(self.age))
        print("我的年齡"+ Student.status) #訪問類變量


    #類方法:必須是使用@classmethod裝飾器的方法纔是類方法
    @classmethod
    def plusSum(cls):
        cls.sum += 1
        #print(self.name)  #不能訪問實例變量
        print("類方法訪問類變量sum:"+ str(cls.sum))
        print("類方法訪問類變量sum:"+ str(Student.sum))


    #靜態方法:
    @staticmethod
    def testStaticMethod():
        #print(self.name)  #不能訪問實例變量
        print("靜態方法訪問類變量sum:"+ str(Student.sum))
測試代碼:

#測試1:創建實例對象,並調用類方法
stu1 = Student("小明")        #創建Student實例

stu1.introSelf()             #調用實例的公開方法

Student.plusSum()            #調用類方法,增加學生計數

print(Student.motto)         #通過類名訪問類變量

print(stu1.__class__.motto)  #通過實例訪問類變量

stu1.testValue = "testValue" #外部實例直接增加原不存在的實例屬性

print(stu1.testValue)

三、構造函數

構造函數是通過特殊的init_方法來創建實例對象的方法,它具有以下特點
1.傳入的第一個參數必須是self,表示創建的實例本身;
2.構造函數與普通方法一樣,如果沒有return值,默認是返回none;
3.構造函數在創建對象時會自動調用,也可以主動調用但是不常用;

四、類變量與實例變量

類變量:直接定義在類中的變量
有兩種方法訪問類變量:
1.通過類名訪問:”類名.類變量名”,如”Student.motto”
2.通過實例訪問:”實例名.class_.類變量名”,如”stu1.__class.motto”

實例變量:實例變量是和具體實例相關的變量,所以只能被實例訪問,有兩種方法添加實例變量:
1.在構造方法中通過self綁定,會增加新的實例屬性
2.在外部,通過創建的實例直接綁定,會增加新的實例屬性,如:stu1.testValue = “testValue”

五、實例方法與類方法

實例方法是在類中定義的用於描述實例行爲的函數,它具有以下特點:
1.實例方法參數中必須添加self關鍵字,否則報錯,但是調用方法的時候不需要傳入self;
2.self用於表示當前實例,用於訪問實例屬性;
3.self可以使用this等其他變量名替換,但是不推薦這樣做;
4.實例方法只能被創建後的實例調用,而不能像類方法一樣通過類名調用;

類方法具有以下特點:
1.類方法的方法名上必須用裝飾器”@classmethod”標記,第一個參數必須是cls;
2.cls用於表示當前類,用於訪問類變量,操作與實例無關的行爲;
3.cls也可以換成self等其他變量名替換,但不推薦這樣做;
4.類方法通過類名直接調用,也可以被實例調用(但不推薦)
5.類方法中只能訪問類變量(通過cls或者類名),不能訪問實例變量

六、靜態方法

1.靜態方法的方法名上必須用裝飾器”@staticmethod”標記,參數不限制;
2.靜態方法可以被類或者實例調用;
3.靜態方法只能訪問類變量(通過類名),不能訪問實例變量;
4.靜態方法功能與類方法功能相似,但又與面向對象本身關聯不大,所以不推薦經常用;

七、變量查找順序

當我們需要在外部通過實例來訪問它的實例變量時,Python返回該變量的順序如下:
1.Python會根據變量名在實例中查找此變量,如果存在就會直接返回該變量;
2.如果對象中不存在此變量,且類中存在同名的類變量,則返回此類變量;
3.如果類變量也不存在,就會繼續在父類中尋找,直至找到返回或者查無此變量;
4.注意:此查找順序只在外部訪問實例變量時有效,實例方法內部訪問實例便量不符合此規則

 ##八、方法與函數的區別
方法和函數都指的我們封裝的用來實現特定功能的代碼塊。但是方法的概念更偏向於設計層面,所以結合面向對象的程序思想來分析,對於這樣的代碼塊,定義在類裏叫作方法,定義在模塊中稱之爲函數。

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