python3.7類基礎

1.概念(有基礎可直接跳過)

類 Class: 用來描述具體相同的屬性和方法的對象的集合。定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

對象類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。

類變量類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作爲實例變量使用。

類方法類中定義的函數。

數據成員類變量或者實例變量用於處理類及其實例對象的相關數據。

方法重寫如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱爲方法的重寫。

實例變量定義在方法中的變量,只作用於當前實例的類。

繼承即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作爲一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬”是一個(is-a)”關係(例圖,Dog是一個Animal)。

實例化創建一個類的實例,類的具體對象。就是將創建的類賦值給另一個變量。理解爲賦值即可,a = class(),這個過程,就叫做實例化

2.類的定義

python所有的類都是Object的子類,定義如下(方括號沒有意義,只是說明此處應該被替換成你自己的名字):

class [ClassName]([SuperClass1],[SuperClass2],......): #括號中爲父類
    [VariableName1]        #公有類變量
    _[VariablName2]        #保護類變量
    __[VariableName3]      #私有類變量

    def [FunctionName](self):    #公有實例成員方法
        self.[VariableName]      #公有實例成員變量
        self._[VariableName]     #保護實例成員變量
        self.__[VariableName]    #私有實例成員變量

    def _[FunctionName](self):    #保護實例成員方法
        pass
    
    def __[FunctionName](self):   #私有實例成員方法
        pass

    @classmethod
    def [FunctionName](cls):   #類成員方法
        pass

    @staticmethod
    def [FunctionName]():   #靜態成員方法
        pass

    

3.成員權限

python類中無論是成員變量還是成員方法,統一稱爲成員。

python中沒有像java那種明確的關於變量和方法權限的定義(private、protected、缺省、public),所有的成員都是公有屬性。

成員前面加上一個下劃線只是一種聲明,仍然可以通過類或對象直接訪問(.);

成員前面加上兩個下劃線,編譯執行時會自動在成員名前加上“_ClassName”,即全稱爲“_ClassName__VariableName”或者“_ClassName__FunctionName”,如果知道這個機制,仍然可以直接訪問。

4.不同變量的區別

類成員變量:在類中、類成員函數外定義的變量,屬於類,可以通過“類名.類成員變量”和“實例.類成員變量”來直接訪問。

實例成員變量:在類成員函數中使用“self.實例成員變量”定義的變量,屬於實例,只能通過“實例.實例成員變量”來訪問。

當實例成員變量和類成員變量重名時,使用實例訪問變量優先實例成員變量,使用類訪問變量優先類成員變量。

class Student:
    name = 'man'                #成員變量

    def __init__(self):
        self.name = 'AIRCode'   #實例變量

if __name__ == '__main__':
    s = Student()
    print(s.name)
    print(Student.name)

 運行結果:

AIRCode
man

5.不同方法的區別

實例成員方法:類中直接聲明的方法,第一個參數必須是本對象(self只是變量名,可以自定義),方法中可以訪問所有變量,可以通過“實例.實例成員方法”調用。

類成員方法:類中被@classmethod修飾的方法,第一個參數必須是本類(cls只是變量名,可以自動義),方法中只能訪問類變量,可以通過“實例.類成員方法”、“類.類成員方法”調用。

靜態成員方法:類中被@staticmethod修飾的方法,參數自定義,方法不能訪問實例變量,只能通過"__class__.類成員變量"的方式訪問類成員變量(__class__是在object中定義的類成員變量),可以通過“實例.類成員方法”、“類.類成員方法”調用。

當三種方法名稱相同時,順序爲:靜態成員方法-->類成員方法-->實例成員方法

class Student:
    def say(self):
        print("My name is {0}.".format("object"))

    @classmethod
    def csay(cls):
        print("My name is {0}.".format("class"))

    @staticmethod
    def ssay():
        print("My name is {0}.".format("static"))

if __name__ == '__main__':
    s = Student()
    s.say()
    Student.csay()
    Student.ssay()

 運行結果:

My name is object.
My name is class.
My name is static.

 

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