1. 程式人生 > >Python——面向物件程式設計(引言)

Python——面向物件程式設計(引言)

一、類和例項

        類和例項相互關聯著:類是物件的定義,而例項是“真正的實物”。下面的例項展示瞭如何建立一個類:

>>> class MyNewObjectType(bases):
...     'define MyNewObjectType class'
...     class_suite
...
        關鍵字是 class,緊接著是一個類名。隨後是定義類的類體程式碼。類必須繼承至少一個父類,引數 bases 可以是一個(單繼承)或多個(多重繼承)用於繼承的父類。object是“所有類之母”。如果你的類沒有繼承任何其他父類,object將作為預設的父類。它位於所有類繼承結構的最上層。

        建立一個例項的過程稱作例項化,過程如下:

>>> myFirstObject = MyNewObjectType()
        類名使用我們所熟悉的函式操作符(()),以“函式呼叫”的形式出現。然後通常會把這個新建的例項賦給一個變數。

        類即可以很簡單,也可以很複雜。最簡單的情況,類僅用作名稱空間(namespace)。這意味著你把資料儲存在變數中,對他們按名稱空間進行分組,使得他們處於同樣的關係空間中——所謂的關係是使用標準Python句點屬性標識。

>>> mathObj = MyData()
>>> mathObj.x = 4
>>> mathObj.y = 5
>>> mathObj.x + mathObj.y
9
        例項名字 mathObj 將 mathObj.x 和 mathObj.y 關聯起來。這就是使用類作為名字空間容器。mathObj.x 和 mathObj.y 是例項屬性,因為他們不是類 MyData 的屬性,而是例項物件(mathObj)的獨有屬性。

二、方法

        在Python 中,方法定義在類定義中,但只能被例項所呼叫。也就是說,呼叫一個方法的最終途徑必須是這樣的:(1)定義類(和方法);(2)建立一個例項;(3)最後一步,用這個例項呼叫方法。

>>> class MyDataWithMethod(object):
...     def printFoo(self):
...             print('You invoked printFoo()!')
...
        self 引數,它在所有的方法宣告中都存在。這個引數代表例項物件本身,當你用例項呼叫方法時,有直譯器悄悄地傳遞給方法的,所以,你不需要自己傳遞 self 進來,因為它是自動傳入的。一般的方法會需要這個例項(self),而靜態方法或類方法不會,其中類方法需要類而不是例項。
>>> myObj = MyDataWithMethod()
>>> myObj.printFoo()
You invoked printFoo()!
        介紹一個特殊的方法 __init__(),__init__() 類似於類構造器。Python 建立例項後,在例項化過程中,呼叫 __init__() 方法,當一個類被例項化時,就可以定義額外的行為。

三、建立一個類(類定義)

>>> class AddrBookEntry(object):
...     'address book entry class'
...     def __init__(self, nm, ph):
...             self.name = nm
...             self.phone = ph
...             print('Created instance for:', self.name)
...     def updatePhone(self, newph):
...             self.phone = newph
...             print('Updated phone# for:', self.name)
...
>>>
         在 AddrBookEntry 類的定義中,定義了兩個方法:__init__() 和 updatePhone()。

四、建立例項(例項化)

>>> john = AddrBookEntry('John Doe', '408-555-1212')
Created instance for: John Doe
>>> jane = AddrBookEntry('Jane Doe', '650-555-1212')
Created instance for: Jane Doe
        如果不存在預設的引數,那麼傳給 __init__() 的兩個引數在例項化時是必須的。

五、訪問例項屬性

>>> john
<__main__.AddrBookEntry object at 0x01E0FB30>
>>> john.name
'John Doe'
>>> john.phone
'408-555-1212'
>>> jane.name
'Jane Doe'
>>> jane.phone
'650-555-1212'
六、方法呼叫(通過例項)
>>> john.updatePhone('415-555-1212')
Updated phone# for: John Doe
>>> john.phone
'415-555-1212'
七、建立子類

        靠繼承來進行子類化是建立和定製新型別的方式,新的類將保持已存在類所有的特性,而不會改變原有類的定義。新的子類可以定製只屬於它的特定功能。除了與父類或基類的關係外,子類與通常的類沒有什麼區別,也行一般類一樣進行例項化。

>>> class EmplAddrBookEntry(AddrBookEntry):
...     'Employee Address Book Entry class'
...     def __init__(self, nm, ph, id, em):
...             AddrBookEntry.__init__(self, nm, ph)
...             self.empid = id
...             self.email = em
...     def updateEmail(self, newem):
...             self.email = newem
...             print('Updated e-mail address for:', self.name)
...
        在上面的類中,不僅定義了 __init__(),updateEmail() 方法,而且還從 AddrBookEntry中繼承了 updatePhone() 方法。

        如果需要,每個子類最好定義它自己的構造器,不然,基類的構造器會被呼叫。然而,如果子類重寫基類的構造器,基類的構造器就不會被自動呼叫了——這樣,基類的構造器就必須顯示寫出才會被執行。這裡要顯示傳遞 self 例項物件給基類構造器,因為我們不是在該例項中而是在一個子類例項中呼叫基類的__init__方法的。

八、使用子類

>>> john = EmplAddrBookEntry('John Doe', '408-555-1212', 42, '[email protected]')
Created instance for: John Doe
>>> john
<__main__.EmplAddrBookEntry object at 0x01E0FC30>
>>> john.name
'John Doe'
>>> john.phone
'408-555-1212'
>>> john.email
'[email protected]'
>>> john.updatePhone('415-555-1212')
Updated phone# for: John Doe
>>> john.phone
'415-555-1212'
>>> john.updateEmail('[email protected]')
Updated e-mail address for: John Doe
>>> john.email
'[email protected]'
>>>

相關推薦

Python——面向物件程式設計引言

一、類和例項         類和例項相互關聯著:類是物件的定義,而例項是“真正的實物”。下面的例項展示瞭如何建立一個類: >>> class MyNewObjectType(bases): ... 'define MyNewObjectType

Python——面向物件程式設計未完

文章目錄 一、OOP 1、什麼是面向物件 2、什麼是物件 3、OO和PO 二、類和例項 1、類和例項 2、類屬

python快速學習系列6面向物件程式設計OOP

一、面向物件程式設計: 1.比設計模式更重要的是設計原則: 1)面向物件設計的目標: ·可擴充套件:新特性很容易新增到現有系統中,基本不影響系統原有功能 ·可修改:當修改某一部分程式碼時,不會影響到其他不相關的部分 ·可替代:用具有相同介面的程式碼去替換系統中某一部分程式碼時,系統不受影

18.python面對物件程式設計—什麼是面向物件,類和例項,訪問限制

終於開始了python的核心內容了,前面都是細枝末節的小東西。先開始第一個話題,什麼是面向物件的程式設計(opp)。1)什麼是面向物件我們可以拿C語言這個典型的面向過程的程式語言來對比,面對同樣一個問題,”我吃飯“(原諒我是個吃貨)。面向過程關注的是吃這個動作。而面向物件關注

Python篇----面向物件程式設計類和物件

1 概述     簡稱:OOP(Oriented Object Programming)。這是一種以構建物件,程式設計實現為方向的語言。現實世界中,許多問題過於複雜,需要拆分,所以用不同的物件代替各

Python學習之==>面向物件程式設計

一、類的特殊成員 我們在 Python學習之==>面向物件程式設計(一)中已經介紹過了構造方法和析構方法,構造方法是在例項化時自動執行的方法,而析構方法是在例項被銷燬的時候被執行,Python類成員中還存在著一些具有特殊意義的方法,下面我們來一一介紹一下: 1、__doc__ 表示類的描述資訊

python學習-基礎-面向物件程式設計高階

面向物件程式設計高階 slots # __slots__ # Python允許在定義class的時候,定義一個特殊的__slots__變數,來限制該class例項能新增的屬性: # __slots__定義的屬性僅對當前類例項起作用,對繼承的子類是不起作用的 # 除非

Python面向物件程式設計類和例項 訪問限制 繼承和多型 獲取物件資訊 例項屬性和類屬性

面向物件程式設計——Object Oriented Programming,簡稱OOP,是一種程式設計思想。OOP把物件作為程式的基本單元,一個物件包含了資料和操作資料的函式。 資料封裝、繼承和多型是面向物件的三大特點 在Python中,所有資料型別都可以視

楊玲 201771010133《面向物件程式設計java》第十週學習總結

《面向物件程式設計(java)》第十週學習總結 第一部分:理論知識學習部分    第八章    泛型程式設計 一、泛型程式設計的定義 1、JDK 5.0 中增加的泛型型別,是Java 語言中型別安全的一次重要改進。 2、 泛型:也稱引數化型別(paramete

徐思201771010132《面向物件程式設計java》第十週學習總結

一、理論知識部分 泛型:也稱引數化型別,就是在定義類、介面和方法時,通過型別引數指示將要處理的物件型別。(如ArrayList類) 泛型程式設計(Generic programming):編寫程式碼可以被很多不同型別的物件所重用。 一個泛型類(generic class)就是具有一個或多個型別變數的類,

劉志梅 2017710101152《面向物件程式設計java》 第十週學習總結

實驗十  泛型程式設計技術 實驗時間 2018-11-1 1、實驗目的與要求 (1)泛型程式設計:意味著編寫的程式碼可以被很多不同型別的物件所重用。(ArrayList類可以聚集任何型別的物件) 如果在其它地方,若將get的結果強制型別轉換為String型別,就會產生一個錯誤;泛型

201771010120 蘇浪浪 面向物件程式設計Java第10周

  1、實驗目的與要求 (1) 理解泛型概念; (2) 掌握泛型類的定義與使用; (3) 掌握泛型方法的宣告與使用; (4) 掌握泛型介面的定義與實現; (5)瞭解泛型程式設計,理解其用途。 2、實驗內容和步驟 實驗1: 匯入第8章示例程式,測試程式並進行程式碼註釋。 測試程式1:

201771010128王玉蘭《面向物件程式設計Java》第十週學習總結

第一部分:理論知識部分總結: (1) 定義簡單泛型類: A:泛型:也稱引數化型別(parameterizedtype),就是在定義類、介面和方法時,通過型別引數指 示將要處理的物件型別。 B:泛型程式設計(Genericprogramming):編寫 程式碼可以被很多不同型別的物件所重用。 C: 一個

201771010112羅鬆《面向物件程式設計java》第十週學習總結

                                           

馮志霞201771010107《面向物件程式設計java》第十週學習總結

實驗十  泛型程式設計技術 實驗時間 2018-11-1 1、實驗目的與要求 (1) 理解泛型概念; (2) 掌握泛型類的定義與使用; (3) 掌握泛型方法的宣告與使用; (4) 掌握泛型介面的定義與實現; (5)瞭解泛型程式設計,理解其用途。  Java中泛型類的定義也比

王海珍 201771010124《面向物件程式設計Java》第十週實驗總結

第一部分:理論知識  主要內容:   什麼是泛型程式設計                    泛型類的宣告及例項化的方法       &

201771010126 王燕《面向物件程式設計Java》第十週學習總結

實驗十  泛型程式設計技術 實驗時間 2018-11-1 1、實驗目的與要求 (1) 理解泛型概念; 泛型:也稱引數化型別(parameterized type),就是在定義類、介面和方法時,通過型別引數指示將要處理的物件型別。(如ArrayList類). 泛型

201771010125王瑜《面向物件程式設計Java》第十週學習總結

實驗十  泛型程式設計技術 一 理論部分 1.泛型:引數化型別,在定義類、介面、方法時通過型別引數指示將要處理的物件型別 2.泛型程式設計意味著編寫的程式碼可以被許多不同型別的物件所重用 3.定義簡單泛型類:   (1)一個泛型類就是具有一個或多個型別變數的類,即建立用

李曉菁201771010114《面向物件程式設計Java》第十週學習總結

一:理論部分 1.泛型:也稱引數化型別(parameterized type),就是在定義類、介面和方法時,通過型別引數指示將要處理的物件型別。(如ArrayList類)。 2.泛型程式設計(Generic programming):編寫程式碼可以被很多不同型別的物件所重用。 3.Pair類引入了一個型

王豔 201771010127《面向物件程式設計java》第十週學習總結

一:理論部分。 1.泛型程式設計意味著編寫的程式碼可以被很多不同型別的物件所重用。 1)泛型(引數化型別):在定義類、介面和方法時,通過型別引數指示將要處理的物件型別。如ArrayList類是一個泛型程式設計的例項,可以聚集任何型別的物件。 2)泛型類:就是具有一個或多個型別變數的類,即建立用型別作為引