面向對象基礎

引言:編程範式

  編程是程序員用特定的語法+數據結構+算法組成的代碼來告訴計算機如何執行任務的過程 , 一個程序是程序員爲了獲得一個任務結果而編寫的一組指令的集合,正所謂條條大路通羅馬,實現一個任務的方式有不少種不一樣的方式, 對這些不一樣的編程方式的特色進行概括總結得出來的編程方式類別,即爲編程範式。 不一樣的編程範式本質上表明對各類類型的任務採起的不一樣的解決問題的思路, 大多數語言只支持一種編程範式,固然也有些語言能夠同時支持多種編程範式。 兩種最重要的編程範式分別是面向過程編程和麪向對象編程,固然還有人們常說的函數式編程。html

面向過程編程(Procedural Programming)python

  面向過程編程依賴 , 面向過程又被稱爲top-down languages, 就是程序從上到下一步步執行,一步步從上到下,從頭至尾的解決問題 。基本設計思路就是程序一開始是要着手解決一個大的問題,而後把一個大問題分解成不少個小問題或子過程,這些子過程再執行的過程再繼續分解直到小問題足夠簡單到能夠在一個小步驟範圍內解決。程序員

面向對象編程(Object-Oriented Programming )

  OOP編程是利用「類」和「對象」來建立各類模型來實現對真實世界的描述,使用面向對象編程的緣由一方面是由於它可使程序的維護和擴展變得更簡單,而且能夠大大提升程序開發效率 ,另外,基於面向對象的程序可使它人更加容易理解你的代碼邏輯,從而使團隊開發變得更從容。算法

面向對象編程幾大核心

Class 類
一個類便是對一類擁有相同屬性的對象的抽象、藍圖、原型。在類中定義了這些對象的都具有的屬性(variables(data))、共同的方法數據庫

Object 對象 
一個對象便是一個類的實例化後實例,一個類必須通過實例化後方可在程序中調用,一個類能夠實例化多個對象,每一個對象亦能夠有不一樣的屬性,就像人類是指全部人,每一個人是指具體的對象,人與人以前有共性,亦有不一樣編程

Encapsulation 封裝
在類中對數據的賦值、內部調用對外部用戶是透明的,這使類變成了一個膠囊或容器,裏面包含着類的數據和方法數據結構

Inheritance 繼承
一個類能夠派生出子類,在這個父類裏定義的屬性、方法自動被子類繼承ide

Polymorphism 多態
多態是面向對象的重要特性,簡單點說:「一個接口,多種實現」,指一個基類中派生出了不一樣的子類,且每一個子類在繼承了一樣的方法名的同時又對父類的方法作了不一樣的實現,這就是同一種事物表現出的多種形態。模塊化

 面向對象基礎介紹

  好了,話很少說,咱們先來看一下最簡單的定義一個類和使用的方法。函數式編程

class Person(object):     #定義一個類, class是定義類的語法,Person是類名,(object)是新式類的寫法。
    def __init__(self,name,age,cn='中國'):     #構造函數,爲你實例化類的對象傳參數,類名加括號就會自動執行該方法。
        self.name = name
        self.age = age

    def talk(self):        #定義類的方法,爲何它們都要自動傳入一個self?下面我再解釋。。。
        print('%s is talking'%self.name)

    def __del__(self):    #析構函數,在實例釋放、銷燬的時候自動執行,一般用於作一些收尾工做,如關閉一些數據庫鏈接,關閉打開的臨時文件等等,通常能夠不寫。
        print('結束了')

p1 = Person('wusir',22)
p1.talk()

  那至於爲何會自動傳入一個self呢,咱們看下面這個圖:

   根據上圖咱們得知,其實self,就是實例自己!你實例化時python會自動把這個實例自己經過self參數傳進去。

面向對象的三大特性

封裝

封裝最好理解了。封裝是面向對象的特徵之一,是對象和類概念的主要特性。

封裝,也就是把客觀事物封裝成抽象的類,而且類能夠把本身的數據和方法只讓可信的類或者對象操做,對不可信的進行信息隱藏。

繼承

  面向對象編程 (OOP) 語言的一個主要功能就是「繼承」。繼承是指這樣一種能力:它可使用現有類的全部功能,並在無需從新編寫原來的類的狀況下對這些功能進行繼承和擴展。

經過繼承建立的新類稱爲「子類」或「派生類」。被繼承的類稱爲「基類」、「父類」或「超類」。

繼承的過程,就是從通常到特殊的過程。

Python2 經典類是按深度優先來繼承的,新式類是按廣度優先來繼承的,
Python3 經典類和新式類都是統一按廣度優先來繼承的。

OK,那什麼是經典類、新式類,什麼又是深度優先和廣度優先。之後我會慢慢介紹。

多態

  多態性(polymorphisn)是容許你將父對象設置成爲和一個或更多的他的子對象相等的技術,賦值以後,父對象就能夠根據當前賦值給它的子對象的特性以不一樣的方式運做。簡單的說,就是一句話:容許將子類類型的指針賦值給父類類型的指針。那麼,多態的做用是什麼呢?咱們知道,封裝能夠隱藏實現細節,使得代碼模塊化;繼承能夠擴展已存在的代碼模塊(類);它們的目的都是爲了——代碼重用。而多態則是爲了實現另外一個目的——接口重用!多態的做用,就是爲了類在繼承和派生的時候,保證使用「家譜」中任一類的實例的某一屬性時的正確調用。好吧,我知道你沒看懂,簡單來講,多態就是:一種接口,多種實現。
 
  好了,說了半天大家確定也暈了,這TM到底說的是個啥,看下面代碼吧。
 Person(object):
    def __init__(self, name, job):
        self.name = name
        self.job = job
    def whoAmI(self):
        print('I am a %s, my name is %s' % (self.job,self.name))

class Student(Person):
    def __init__(self,name,job, gender):
        super(Student, self).__init__(name,job)
        self.gender = gender

class Teacher(Person):
    def __init__(self,name,job,gender):
        super(Teacher, self).__init__(name,job)
        self.gender = gender

def who_am_i(x):
    x.whoAmI()

s = Student('Bob', 'student', '')
t = Teacher('Alice', 'teacher', '')

who_am_i(s)
who_am_i(t)
點開瞅一眼

  這個代碼很好的說明了這三大特性,代碼的封裝,繼承和多態。將功能封裝到類裏面,同時Student類和Teacher類又繼承了Person類的屬性與方法,最後調用一樣的接口who_am_i,來輸出不一樣的結果。

I am a student, my name is Bob
I am a teacher, my name is Alice
輸出結果

此次就先說到這吧,關於面向對象的進階部分請看下一篇博客。

相關文章
相關標籤/搜索