python面向對象

面向對象技術簡介

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

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

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

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

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

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

實例化:創建一個類的實例,類的具體對象。

方法:類中定義的函數。

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


1.類和實例


類的創建

class後面緊接着是類名,即Student,類名通常是大寫開頭的單詞,緊接着是(object),

表示該類是從哪個類繼承下來的,繼承的概念我們後面再講,通常,

如果沒有合適的繼承類,就使用object類,這是所有類最終都會繼承的類

class Student(object):

    pass


定義好了Student類,就可以根據Student類創建出Student的實例,創建實例是通過類名+()實現

bart = Student()

>>> bart

<__main__.Student object at 0x10a67a590>

>>> Student

<class '__main__.Student'>


由於類可以起到模板的作用,因此,可以在創建實例的時候,把一些我們認爲必須綁定的屬性強制填寫進去。

通過定義一個特殊的__init__方法,在創建實例的時候,就把name,score等屬性綁上去


class Student(object):


    def __init__(self, name, score):

        self.name = name

        self.score = score

訪問限制

如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線__,在Python中,

實例的變量名如果以__開頭,就變成了一個私有變量(private),

只有內部可以訪問,外部不能訪問


class Student(object):


    def __init__(self, name, score):

        self.__name = name

        self.__score = score


    def print_score(self):

        print('%s: %s' % (self.__name, self.__score))


好處:這樣就確保了外部代碼不能隨意修改對象內部的狀態,這樣通過訪問限制的保護,代碼更加健壯



但是如果外部代碼要獲取name和score怎麼辦?可以給Student類增加get_name和get_score這樣的方法

class Student(object):

    ...


    def get_name(self):

        return self.__name


    def get_score(self):

        return self.__score

如果又要允許外部代碼修改score怎麼辦?可以再給Student類增加set_score方法

class Student(object):

    ...


    def set_score(self, score):

        self.__score = score

__slots__函數

dict字典是可以隨意操作數據,在實例的dict只保持實例的變量,

對於類的屬性是不能保存的,類的屬性包括變量和函數。

__slots__是一個元組,包括了當前能訪問到的屬性。

當定義了slots後,slots中定義的變量變成了類的描述符,相當於java,c++中的成員變量聲明,

類的實例只能擁有slots中定義的變量,不能再增加新的變量。注意:定義了slots後,就不再有dict


class Student(object):

    __slots__ = ('x')

    x = 9



def __init__(self):

    pass



b = Student()

b.x = 1

print b.x


報錯:

       Traceback (most recent call last):

       File "F:/python/python_Test.py", line 15, in <module>

       b.x = 1

       AttributeError: 'Student' object attribute 'x' is read-only

   

   



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