Python opp知識整理

來源:互聯網
上載者:User

標籤:複雜   解釋   成績   else   概念   ast   code   參考   對象   

本知識點參考廖雪峰的Python課程 [https://www.liaoxuefeng.com]感謝北京圖靈知非的免費課程 [http://www.tulingxueyuan.com/]

2018/6/25 星期一 9:56:21

Python物件導向編程--01物件導向的概念
  • 物件導向編程——Object Oriented Programming,簡稱OOP,是一種程式設計思想。OOP把對象作為程式的基本單元,一個對象包含了資料和操作資料的函數。
  • 在Python中,所有資料類型都可以視為對象,當然也可以自訂對象。自訂對象的資料類型就是物件導向中類(Class)的概念
  • 假如我們列印學生的成績表
    • 面向過程會這樣實現,我們程式的執行流程是:

      std1 ={‘name‘:‘yang‘,‘score‘:99}std2 = {‘name‘:‘wen‘,‘score‘:99}def print_score(std):    print(‘{0}:{1}‘.format(std[‘name‘],std[‘score‘]))
  • 如果採用物件導向的設計思想。Student應該是一個對象,這個對象擁有name和score這兩個屬性,如果列印出學生的成績,必須有student,然後才能把成績列印出來:

        class Student(object):    def __init__(self,name,score):        self.name = name        self.score = score    def print_score(self):        print(‘{0}:{1}‘.format(self.name,self.score))
  • 給對象發訊息實際上就是調用對象的相關函數,我們成為對象的方法:

        yang = Student(‘yangaoteng‘,100)    wen = Student(‘wangwenwen‘,99)    yang.print_score()    wen.print_score()
  • 小結:
    • 物件導向是一種常見的思想,比方說數學公式就是眾多經驗統計出來的結果。比方說 動物、植物、都相當於類的概念
    • 在Python中,所有資料類型都可以視為對象。
    • 我們用 class建立類
    • init,相當於建構函式,就是函數必須輸入的值。
類和執行個體
  • 物件導向最重要的兩個概念就是 類(class)和 執行個體(Instance),類是抽象的模板(好比數學公式),而執行個體是根據類建立出來的’對象‘(好比用數學公式解出來的題)
  • 還以上面的例子,在Python中,定義類通過class關鍵字:

        class Student(object):        pass
  • class後面跟著的是類名,Student,類名大寫字元開頭,後面緊跟著(object),這表示這個類來自哪裡,括弧裡面的object可以不寫
  • 定義好了Student類,可以建立出Student的執行個體,建立執行個體通過類名+()現實:

        yang = Student()
  • 這時候可以自由的給一個執行個體綁定屬性

        yang.name = ‘yangaoteng‘    yang.score = 1000
  • 由於類有的時候會起到模板的作用,我們可以在建立執行個體的時候,把我們一些任務必須綁定的屬性填寫進去。我們可以通過一個特殊的 __ init __(前後個有兩個_),在建立執行個體的時候,就可以把 name , score 等屬性綁定上去:

        class Student():        def __init__(self,name,score):            self.name = name            self.score = score
  • __ init __ 方法的第一個參數永遠是self,self表示建立的執行個體本身
  • 有了__ init__ 方法,在建立執行個體的時候,就不能傳入空的函數了,必須傳入與__ init __ 方法匹配的參數,但self不需要傳,Python解譯器會自動上傳進去。

        >>> yang = Student(‘yangaoteng‘,100)    >>> yang.name    ’yangaoteng‘    >>> yang.score    59
  • 做到這裡我們就可以搞事情了,我們可以對資料進行分類,大於90分的成績為’A‘....,進行男女的分類。等等,對資料進行處理

    # 建立一個執行個體,對男女進行分類,對‘成績進行分類’class Student():    def __init__(self,name,score,sex):        self.name = name        self.score = score        self.sex = sex    def Student_score(self):        a=‘男‘        if self.sex ==‘男‘:            a= ‘男‘        elif self.sex == ‘女‘:            a= ‘女‘                if self.score >=80:            print(‘姓名{0},性別{1},成績A‘.format(self.name,a))        elif self.score >=60:            print(‘姓名{0},性別{1},成績B‘.format(self.name,a))        elif self.score >=0:            print(‘姓名{0},性別{1},成績C‘.format(self.name,a))        else:            print(‘666‘)
訪問限制
  • 在class內部,有屬性有方法有方法,外部代碼可以直接調用執行個體變數的方法來進行操作,這樣,就隱藏了內部的複雜邏輯。
  • 但是,從前面的Student類的定義看,外部代碼還是可以自由的修改實際的namescore屬性:

        >>> yang = Student(‘yangaoteng‘,100,‘男‘)    >>> yang.score    100    >>> yang.score=0    >>> yang.score    0
  • 這樣我的成績就被改變成了0分,顯然是不可能的。如果想讓內部屬性不被外部存取,可以在屬性名稱前面加上兩個底線 __,在Python中,執行個體的變數如果以__開頭,就是私人變數(private),只有內部可以訪問,外部不可以訪問。

        class Student(object):    def __init__(self,name,score):        self.__name = name        self.__score = score    def print_score(self):        print(‘{0}:{1}‘.format(self.__name,self.__score))
  • 改變完成之後,就無法通過外部存取了

        >>> yang = Student(‘yangaoteng‘,100,‘男‘)    >>> yang._name    Traceback (most recent call last):    File "<stdin>", line 1, in <module>    AttributeError: ‘Student‘ object has no attribute ‘__name
  • 這樣參數被隱藏了,我們無法在內部進行訪問,我們就可以更好的處理資料。

        #     class Student():        def __init__(self, name, score):            self.__name = name            self.__score = score        def get_name(self):            return self.__name        def get_score(self):            return self.__score        def set_name(self,name):            self.__name = name        def set_score(self,score):            if 0<=score<=100:                self.__score = score            else:                raise ValueError("數值不規範,請輸入(0-100)的數字")        def print_score(self):            print("{0}:{1}" % (self.__name, self.__score))

Python opp知識整理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.