python學習之物件導向【入門初級篇】,python物件導向

來源:互聯網
上載者:User

python學習之物件導向【入門初級篇】,python物件導向

前言

最近在學習Python的物件導向編程,以前是沒有接觸過其它的物件導向編程的語言,因此學習這一部分是相當帶勁的,這裡也總結一下。

概述

  • python支援多種編程範式:面向過程、物件導向、面向切面(裝飾器部分)等。
  • 面向過程:根據商務邏輯從上到下寫壘代碼
  • 函數式:將某功能代碼封裝到函數中,日後便無需重複編寫,僅調用函數即可
  • 物件導向:對函數進行分類和封裝,讓開發“更快更好更強...”

OOP思想

  • 物件導向的基本哲學:世界由具有各自運動規律和內部狀態的對象組成,對象之間相互作用和通訊構成了世界。
  • 唯一性,世界沒有兩片相同的樹葉,同樣的沒有相同的對象。
  • 分類性,分類是對現實世界的抽象。
  • 三大特性:封裝、繼承和多態

物件導向的三大特性:

一、封裝

封裝,對具體對象的一種抽象,即將某些部分隱藏起來,在程式外部看不到,即無法調用。

私人化:將類或函數中的某些屬性限制在某個地區之內,外部無法調用。

Python中私人化的方法也比較簡單,就是在準備私人化的屬性(包括方法、資料)名字前面加雙底線。

例如:

class ProtectMe(object):  def __init__(self): self.me = "qiwsir" self.__name = "kivi"  def __python(self): print("I love Python.")   def code(self): print9"Which language do you like?") self.__python() if __name__ == "__main__": p = ProtectMe() print(p.me) print(p.__name) #運行結果qiwsirTraceback (most recent call last): File "21102.py", line 21, in <module> print p.__nameAttributeError: 'ProtectMe' object has no attribute '__name' 

說明:__name屬性隱藏了,無法調用。

調用私人屬性,可以使用property函數

class ProtectMe(object):  def __init__(self): self.me = "qiwsir" self.__name = "kivi"  @property def name(self): return self.__name if __name__ == "__main__": p = ProtectMe() print(p.name)#運行結果 kivi 

所以,在使用物件導向的封裝特性時,需要:

  • 將內容封裝到某處
  • 從某處調用被封裝的內容

第一步:將內容封裝到某處

 self 是一個形式參數,當執行 obj1 = Foo('wupeiqi', 18 ) 時,self 等於 obj1

                              當執行 obj2 = Foo('alex', 78 ) 時,self 等於 obj2

所以,內容其實被封裝到了對象 obj1 和 obj2 中,每個對象中都有 name 和 age 屬性,在記憶體裡類似於來儲存。

第二步:從某處調用被封裝的內容

調用被封裝的內容時,有兩種情況:

  • 通過對象直接調用
  • 通過self間接調用
class Role(object): ac = None #類變數 def __init__(self,name,role,weapon,life_value): #初始化方法 self.name = name #執行個體變數(成員變數) self.role = role self.weapon = weapon self.life_val = life_value  def buy_weapon(self,weapon): #定義方法 #self:表示執行個體本身 self.weapon = weapon # print("%s is buying [%s]" %(self.name,weapon)) #把一個抽象的類變成一個具體的對象的過程,叫執行個體化 p1 = Role("sanjiang",'Police',"B10",90) #執行個體t1 = Role("Chunyun",'Terrorist',"B11",100)

二、繼承

繼承,物件導向中的繼承和現實生活中的繼承相同,即:子可以繼承父的內容。

class SchoolMember(object): # member_nums = 0 def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex # self.enroll()  def enroll(self): SchoolMember.member_nums += 1 print("SchoolMember [%s] is enrolled!" %self.name)  def tell(self): print("Hello my name is [%s]" %self.name) class Teacher(SchoolMember): def __init__(self,name,age,sex,course,salary): #重寫父類的__init__方法 super(Teacher,self).__init__(name,age,sex) #繼承(新式類) # SchoolMember.__init__(self,name,age,sex) #繼承(舊式類) self.course = course self.salary = salary  def teaching(self): print("Teacher [%s] is teaching [%s]" %(self.name,self.course))   class Student(SchoolMember): def __init__(self,name,age,sex,course,tuition): super(Student,self).__init__(name,age,sex) self.course = course self.tuition = tuition  def pay_tuition(self): print("ca,student [%s] paying tuition [%s] again" %(self.name,self.tuition))

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流。

聯繫我們

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