python中對象的多態、封裝、繼承介紹


python是一種面向對象的語言。面向對象程序設計中的術語對象基本上可以看做數據(特性)以及由一系列可以存取、操作這些數據的方法所組成的集合。使用對象替代全局變量和函數的原因可能有很多,其中對象最重要的優點包括三個方面:

  1. 多態:可以對不同類的對象使用同樣的操作
  2. 封裝:對外部世界隱藏對象的工作細節
  3. 繼承:以普通的類為基礎建立專門的類對象

多態和方法

程序得到了一個對象,不知道它是怎么實現的,它可能有多種"形狀"。

綁定到對象特性上面的函數稱為方法。

>>> 'abc'.count('a')
1
>>> [1,2,'a'].count('a')
1

 對應變量x來說,不需要知道它是字符串還是列表,就可以調用它的count方法,不用管它是什么類型

舉例,標准庫random中包含choice函數,可以從序列中隨機選出元素。給變量賦值:

>>> from random import choice
>>> x=choice(['Hello,world!',[1,2,'e','e',4]])

運行后,變量x隨機選擇一個值

>>> x.count('e')
1
>>> x
'Hello,world!'
>>> 

多態的多種形式

任何不知道對象到底是什么類型,但是又要對對象操作時,都會用到多態。

>>> 1+2
3
>>> 'Hello,'+'world'
'Hello,world'
>>> add(1,2)
3
>>> add('Hello,','world')
'Hello,world'

參數可以是任何支持加法的對象。

編寫打印對象長度消息的函數

>>> def length_message(x):
    print "The length of",repr(x),"is",len(x)

函數中使用了repr函數,repr函數是多態特性的代表之一

>>> length_message('Fnord')
The length of 'Fnord' is 5
>>> length_message([1,2,3])
The length of [1, 2, 3] is 3

封裝

封裝是對全局作用域中其他區域隱藏多余信息的原則。不用關心對象是如何構建的而直接進行使用

假設有一個叫做OpenObject的類:

>>> o=OpenObject()
>>> o.setName('Sir Lancelot')
>>> o.getName() #此案例並不能運行成功,只是假設
'Sir Lancelot'

創建了一個對象后,將變量o綁定到該對象上。可以使用setName和getName方法(假設已經由OpenObject類提供)。

假如變量o將它的名字存儲在全局變量globalName中:

在使用OpenObject類的實例時,不得不關心globalName的內容。

>>> globalName
'Sir Lancelot'
>>> globalName='Sir Gumby'
>>> o.getName() 
'Sir Gumby'

如果創建了多個OpenObject實例會出現問題

>>> o1=OpenObject()
>>> o2=OpenObject()
>>> o1.setName('Robin Hood')
>>> o2.getName()
'Robin Hood'

如果不用全局變量而用特性重寫類,並且重命名為ClosedObject

>>> c=ClosedObject()
>>> c.setName('Sir Lancelot')
>>> c.getName()
'Sir Lancelot'

>>> r=ClosedObject()
>>> r.setName('Sir Robin')
>>> r.getName()
'Sir Robin

>>> c.getName()
'Sir Lancelot'

繼承

 如果已經有了一個類,又想建立一個新的類似的類,讓新的類從老的類中繼承方法,新的類增加幾個方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM