面向對象編程(Object Oriented Programming,OOP),是使用對象(Objects)做爲核心的編程方式。
進而就能夠把對象(Objects)的數據和運算過程封裝(Encapsulate)在內部,而外部僅能根據事先設計好的界面(Interface)與之溝通。編程
對象的構成:ide
屬性 —— 用天然語言描述,一般是名詞(Nouns)
方法 —— 用天然語言描述,一般是動詞(Verbs)
舉個例子:建立一個對象Teacher(老師)函數
Teacher的屬性有name(姓名)、age(年齡)等,Teacher 的方法有teacher(上課)、study(學習)學習
EnglishTeacher(英語老師)也屬於Teacher,因此EnglishTeacher能夠繼承Teacher而且使用Teacher的屬性和方法this
MathTeacher(數學老師)的teach方法不一樣於EnglishTeacher,因此能夠對方法進行重寫。設計
類的私有屬性code
private_attrs:兩個下劃線開頭,聲明該屬性爲私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.private_attrs。orm
類的方法對象
在類的內部,使用 def關鍵字來定義一個方法,與通常函數定義不一樣,類方法必須包含參數 self,且爲第一個參數,self 表明的是類的實例。blog
self 的名字並非規定死的,也能夠使用 this,可是最好仍是按照約定用 self。
類的私有方法
private_method:兩個下劃線開頭,聲明該方法爲私有方法,只能在類的內部調用 ,不能在類的外部調用。在類內部調用self.private_methods。
Python 類定義
Class 使用 class 關鍵字進行定義。class name使用駝峯標識,例如MyClass:
# 定義類 class Teacher: def __init__(self, name, age): self.name = name self.age = age def teach(self): print("{0} teach".format(self.name)) def study(self): print("{0} study".format(self.name)) # 建立類的實例 my_teacher = Teacher("zhangsan", 18) my_teacher.teach() # 輸出 zhangsan teach
注:
self 用來指代未來用這個 Class 建立的 Instance實例。
init() 函數是系統建立實例後被初始化的函數。這個函數名稱是強制指定的,初始化函數必須使用這個名稱;注意 init 兩端各有兩個下劃線 _。
self.name,self.age 各接收了一個參數,表示用戶屬性
Python 類繼承
繼承,顧名思義,新的事物擁有舊事物的特徵,而且能夠傳遞下去。
在Python中,繼承的範圍更廣,好比定義一個實例Teacher,則新的實例EnglishTeacher是老師,因此能夠繼承Teacher。老師有姓名、年齡、性別等屬性,有上課、學習等方法,則英語老師繼承老師的全部屬性和方法。
再好比,定義一個實例Mother母親,定義一個實例Father父親,則新的實例Kids孩子不但能夠繼承Mother還能夠繼承Father。
以上兩個例子分別是單繼承和多繼承。
Python能夠實現單繼承和多繼承
單繼承
# # EnglishTeacher繼承Teacher類 class EnglishTeacher(Teacher): def __init__(self, name, age, score): self.name = name self.age = age self.score = score def teach(self): print("{0} teach".format(self.name)) # 建立類的實例 teacher = EnglishTeacher("xiaomeng", 10) teacher.teach() # 輸出 xiaomeng teach
多繼承
# 定義父親類 class Father: def __init__(self, name, age): self.name = name self.age = age def speak(self): print("{0} is father".format(self.name)) # 定義母親類 class Mother: def __init__(self, name, age): self.name = name self.age = age def speak(self): print("{0} is mother".format(self.name)) # Kid繼承Father和Mother類 class Kid(Father, Mother): def speak(self): print("{0} is kid".format(self.name)) # 建立類的實例 kid = Kid("student", 6) kid.speak() # 輸出 baby is kid