Python面向對象編程 - 類和實例


1、preface

面向對象編程OOP:object oriented programming。
OOP把對象做爲程序的基本單元,一個對象包含了數據和操做數據的函數。Python是一門面向對象的編程語言,經過對象實現對方法的調用。python

面向過程的程序設計把計算機程序視爲一系列的命令集合,即一組函數的順序執行。爲了簡化程序設計,面向過程把函數繼續切分爲子函數,即把大塊函數經過切割成小塊函數來下降系統的複雜度。
而面向對象的程序設計把計算機程序視爲一組對象的集合,而每一個對象均可以接收其餘對象發過來的消息,並處理這些消息,計算機程序的執行就是一系列消息在各個對象之間傳遞。

對於面嚮對象語言,重要的概念是類和實例。類是一個抽象的模板,實例是根據類模板建立出的一個對象。
在python中,全部數據類型均可以視爲對象,固然也能夠自定義對象。自定義對象數據類型就是面向對象中類的概念,根據類來建立對象。
它的三大特色就是:封裝、繼承、多態。編程

2、類class

  • 類是一個抽象的模板,是一種數據結構。
  • 語法:
    class class_name: pass
    class class_name(object): pass
  • 說明:
    class是關鍵字,類。類名class_name一般以大寫字母開頭。
    object表示該類是從哪一個類繼承而來。事實上object是全部類都會繼承的基類,通常不會顯示寫出。(我通常會習慣寫上)

好比學生,一個班級會有不少個學生,那對於學生這個集合,會有不少共同的地方,好比說學生的姓名、學號、年級、專業、成績等一系列共同的特性,那麼咱們就能夠把這些都抽象成一個學生Student類。以下:數據結構

class Student(object):
    pass

上面例子,咱們先用pass進行演示,表示什麼都不操做。編程語言

3、實例instance

經過類能夠建立Student實例,方法以下:函數

>>> bart = Student()        # 變量bart指向的是一個Student的實例 
>>> bart
<__main__.Student object at 0x0086F710> # 類object 實例的內存地址
>>> Student                 # 類
<class '__main__.Student'>     # 返回的是Student 類的屬性 class

對類的實例,能夠進行屬性的綁定。spa

  • 屬性就是一個對象的數據或者函數元素。好比Student類中學生的姓名、學號等信息。
  • 經過「據點屬性標識法」來訪問。
  • python是動態語言,根據類建立的實例能夠任意綁定屬性。給實例綁定屬性的方法是經過實例變量,或者經過self變量。
>>> bart.name = 'xlp'        # 動態給變量綁定屬性
>>> bart.name
'xlp'

那屬性是如何實現綁定的呢?__init__()實例方法。
當一個實例被建立後,Python會檢查是否實現了__init__()方法,若是沒有定義該方法,對實例不會施加任何特定的操做,任何須要特殊的操做,須要本身去自定義該方法。即__init()__會被自動調用,不論是默認的仍是自定義的。設計

  • __init__(self)
  • 一、 該方法的第一個參數永遠都是selfself指向建立的實例自己;
  • 二、 經過該方法,把屬性綁定到self指向的實例上;
  • 三、 __init__()方法返回None
  • 四、 該方法中,能夠設置默認參數和位置參數。建立實例時,不能傳入空的參數,必須傳入與方法匹配的參數,但self不須要傳入,默認參數根據須要進行傳入與否。

針對第三點:由於實例對象是在自動化建立實例調用後返回的,若是定義了構造器__init__(),它不該該返回任何對象,不然就有可能發生衝突,只能返回實例。試圖返回任何非None的其餘對象會報TypeError的錯誤:code

clipboard.png

查看實例屬性:dir()
經過內建函數dir(class_name)能夠查看類的屬性,例如:dir(Student1)。也能夠訪問實例的屬性。本身嘗試打印出來看看~對象

屬性這一塊還有點玄幻:類屬性和實例屬性。下一小節一塊兒來看看吧~
而後面向過程其實也不太記得了,若是有懂的小夥伴能夠留言哦~ ~ ~繼承


若是以爲文章有丟丟用處,動動小指,點個贊吧!

若是哪裏寫的有問題,或者有更好的方式,cue我一下

❤ thanks for watching, keep on updating...

相關文章
相關標籤/搜索