python物件導向基礎

來源:互聯網
上載者:User

標籤:int   建立   ssm   簡單介紹   assm   error   不同   一個   @class   

python物件導向基礎什麼是物件導向編程?

物件導向編程是一種程式設計的範式,它把程式當做不同對象的相互調用,是對現實世界建立的一種物件模型。

物件導向編程的基本思想

也就是類和執行個體

  • 類 :類是用於定義抽象的類型。比如人,是一類東西
  • 執行個體:執行個體是根據類的定義被建立出來的。比如小紅同學,就是根據人的屬性建立出來的。
# 我們通過class關鍵字定義一個類class Person:    pass# 通過類來建立一個執行個體,即類名加上一個類似於函數的調用來建立執行個體xiaohong = Person()
  • 資料封裝:資料封裝是物件導向一個很重要的特性
class Person:    def __init__(self):        self.name = name  # 初始化執行個體的屬性,self代表的是當前執行個體p1 = Person('XiaoHong')
屬性訪問限制

我們可以給一個執行個體綁定很多屬性,我們可以通過在屬性名稱開頭加上雙底線(__),讓這些屬性不被外部存取。

看下面例子:

class Person:    def __init__(self, name):        self.name = name        self._title = 'Mr'  # 單底線        self.__job = 'Student' # 雙底線表示私人屬性# 建立一個Person執行個體p = Person('Tom')print(p.name)print(p._title)print(p.__job)=>TomMr---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-1-0815b282cdc2> in <module>()      7 p = Person('Tom')      8 print(p.name)----> 9 print(p.__job)AttributeError: Person instance has no attribute '__job' 

由此可見,雙底線開頭‘__job‘不能直接被外部存取。
但是問題來了,如果屬性以‘xxx‘形式定義,那它又可以被外部存取。
因為以‘xxx‘定義的屬性在python的類中被稱為特殊屬性,比如__init__/cmp/str/__int__等等這些都是類預先定義的特殊屬性。通常我們不會以這種形式定義屬性。
值得說明的是,以單底線開頭的,應該是不能被外部存取的,到底為什麼,我也不知道。

為類建立屬性

類是模板,而執行個體是根據類建立的對象。
執行個體屬性每一個執行個體各自擁有,相互獨立,而類屬性只有一份。
當類屬性和執行個體屬性名稱字衝突時,優先選擇執行個體屬性。

class Person:    job = 'Student'    def __init__(self, name):        self.name = name# 建立一個Person執行個體p1 = Person('Tom')p2 = Person('Jak')print(Person.job)  # 直接存取類的屬性# 因為python是動態語言,類實質也是個對象,所有類的屬性也是可以動態添加和修改的Person.job = 'Teacher'print(Person.job)# 執行個體屬性每一個執行個體各自擁有,相互獨立。print(p1.name)print(p2.name)=>StudentTeacherTomJak

因此,執行個體屬性每一個執行個體各自擁有,相互獨立,而類屬性只有一份。

定義執行個體方法

執行個體的私人屬性是由雙底線開頭的屬性,無法被外部存取,但內部是可以訪問的。
執行個體方法就是在類中定義的函數,它的第一個參數永遠是self,指向調用該方法的執行個體本身。
在執行個體方法內部,可以訪問所有執行個體屬性,如果外部需要訪問執行個體屬性,可以通過方法調用獲得。

class Person:    def __init__(self, name):        self.__name = name    def get_name(self):        return self.__namep1 = Person('Tom')print(p1.get_name())=>Tom

萬事萬物接對象,類和函數都是對象。

p1 = Person('Tom')print(p1)print(p1.get_name)print(p1.get_name())=><__main__.Person instance at 0x000000000BBAD448><bound method Person.get_name of <__main__.Person instance at 0x000000000BBAD448>>Tom

建立類的方法

和屬性類似,方法也分執行個體方法和類方法。
在類中定義的全部是執行個體方法,執行個體方法第一個參數self是執行個體本身。
在在類中定義類的方法,需要在方法上面使用@classmethod

class Person(object):    count = 0    @classmethod    def how_many(cls):        # 統計該類的執行個體個數        return cls.count    def __init__(self, name):        self.name = name        Person.count = Person.count + 1print Person.how_many()p1 = Person('Bob')print Person.how_many()=>01
結語

這隻是簡單介紹物件導向,如果要深入,多看書。
如果哪有不正確,歡迎指正。

python物件導向基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.