1. 程式人生 > >Python核心程式設計(第十三章)--面向物件程式設計

Python核心程式設計(第十三章)--面向物件程式設計

面向物件程式設計主要是類和類的例項 建立類:
class MyNewObjectType(bases):
    'define MyNewObjectType class'
    class_suite
關鍵詞是class,緊接著是一個類名,隨後是定義類的類體程式碼 object是所有類之母如果你所寫的類沒有繼承其他任何父類,object將作為預設父類。它位於所有類繼承結構的最上層。 建立一個例項的過程稱為例項化: myFirstObject = MyNewObjectType() 類的功能即方法 所有的方法宣告中都有self引數,這個引數代表例項物件本身,當用例項呼叫方法時,不需要傳遞self,他是自動傳入的 如果有兩個引數,呼叫只需要傳遞第二個引數就好
__init__()是一個特殊的方法,當Python建立失利後,在例項化過程中呼叫__init__()方法 建立子類: 繼承的子類將保持已存在類所有特性 類的建立: 簡單的類的生宣告可以是關鍵字後緊跟類名 在Python中定義緊跟著宣告,並且同時所有的方法也必須同時被定義 類屬性: 想知道一個類有哪些屬性有兩種方法: 1)使用內建函式dir(),返回的是物件屬性的一個名字列表 2)訪問類的字典屬性__dict__,返回的是一個字典,鍵是屬性名,鍵值是相應屬性物件的資料值 特殊類:
__init__()是在直譯器為你建立一個例項後呼叫的第一個方法 __new__()構造器方法:它作用在構造方法建造例項之前,在__init__()啟動之前,__new__()決定是否要使用該__init__()方法+ 繼承自object的新式類才有__new__
在例項化開始之後,在呼叫 __init__() 方法之前,Python 首先呼叫 __new__() 方法: def __new__(cls,*args,**kwargs):      ... 第一個引數cls是當前正在例項化的類。 如果要得到當前類的例項,應當在當前類中的 __new__() 方法語句中呼叫當前類的父類的 __new__() 方法。 事實上如果(新式)類中沒有重寫__new__()方法,即在定義新式類時沒有重新定義__new__()時,Python預設是呼叫該類的直接父類的__new__()方法來構造該類的例項,如果該類的父類也沒有重寫__new__(),那麼將一直按此規矩追溯至object的__new__()方法,因為object是所有新式類的基類。
解構器(__del__()):是在例項釋放前提供特殊處理功能的方法,通常要到該例項物件所有的引用都被清除掉後才會執行。 解構器只能被呼叫一次 靜態方法:      staticmethod(靜態方法) 基本上和一個全域性函式差不多,只不過可以通過類或類的例項物件(python裡光說物件總是容易產生混淆, 因為什麼都是物件,包括類,而實際上類例項物件才是對應靜態語言中所謂物件的東西)來呼叫而已, 不會隱式地傳入任何引數。這個和靜態語言中的靜態方法比較像。 classmethod (類方法)是和一個class相關的方法,可以通過類或類例項呼叫,並將該class物件(不是class的例項物件)隱式地 當作第一個引數傳入。就這種方法可能會比較奇怪一點,不過只要你搞清楚了python裡class也是個真實地 存在於記憶體中的物件,而不是靜態語言中只存在於編譯期間的型別。 函式修飾符:@staticmethod  和 @classmethod 組合:讓不同的類混合並加入到其他類中,增加功能和程式碼重用性 子類: 建立子類和普通類沒什麼區別
class SubClassName(ParentClass1[,ParentClass2,...]):
    'optional  class documentation string'
    class_suite

繼承:繼承描述了基類的屬性如何遺傳給派生類,一個子類可以繼承它的基類的任何屬性 super語句呼叫父類方法 ,在super機制裡可以保證公共父類僅被執行一次 對於super(B, self).__init__()是這樣理解的:super(B, self)首先找到B的父類(就是類A),然後把類B的物件self轉換為類A的物件 super並非是一個函式,而是一個類 Python ljust() 方法返回一個原字串左對齊,並使用空格填充至指定長度的新字串。如果指定的長度小於原字串的長度則返回原字串。 多重繼承: 經典類: 經典類的搜尋方式是按照“從左至右,深度優先”的方式去查詢屬性。d先查詢自身是否有foo方法,沒有則查詢最近的父類C1裡是否有該方法,如果沒有則繼續向上查詢,直到在P1中找到該方法,查詢結束。 新式類:沿著繼承樹一步一步上溯不同,它先查詢同胞兄弟採用廣度優先的方式 類、例項內建函式: issubclass(sub,sup)判斷sub是否為父類sup的子類,是的話返回True isinstance(obj1,obj2)判定一個物件是否是另一個給定類的例項:obj1是類obj2或obj的一個子類的一個例項(第二個引數應該是類) __str__和__repr__:  函式str() 用於將值轉化為適於人閱讀的形式,而repr() 轉化為供直譯器讀取的形式 原位加法:__iadd__(),用來支援a+=b這樣的操作符


特殊方法: 這些方法都是以__開始和結尾的
私有化: 雙下劃線(__):為類元素的私有性提供初步的形式,這種雙下劃線開始的屬性被“混淆”(不能直接訪問,需要在名字前面加上類名),這種私有成員只有類物件自己可以訪問,子類物件不能訪問 私有變數會在程式碼生成之前被轉換為長格式(變為公有) 單下劃線(_): "單下劃線" 開始的成員變數叫做保護變數,意思是隻有類物件和子類物件自己能訪問到這些變數 高階特性: __slots__類屬性:是一個類變數,由一序列型物件組成(可以是一個列表,元組或可迭代物件) 這種特性目的是節約記憶體(帶__slots__ 屬性的類不存在__dict__了 ) __getattribute__(): 通過例項訪問屬性,如果class中定義了__getattr__(),則__getattr__()不會被呼叫(除非顯示呼叫或引發AttributeError異常),每個屬性的例項都會呼叫這個特殊方法 描述符:描述符可以實現這三種方法:__get__(),__set__(),__delete__() 函式是非資料描述符,函式的__get__()方法用來處理呼叫物件,並將呼叫物件返回給你 資料描述符協議函式Property()
  • property(fget=None,fset=None,fdel=None,doc=None)   
  • 前面3個引數都是未繫結的方法,所以它們事實上可以是任意的類成員函式
前三個引數分別對應資料描述符中的__get__,__set__,__del__方法 元類(Metaclasses):可以認為元類的例項是類,元類一般用於建立類(類工廠) __metaclass__屬性:如果類中有__metaclass__屬性就用來建立類,沒有就在父類中查詢 用type建立類: type(class_name,bases,dic) 模組:operator模組提供了Python中大多數標準操作符函式版本

相關推薦

Python核心程式設計(十三)--面向物件程式設計

面向物件程式設計主要是類和類的例項 建立類: class MyNewObjectType(bases): 'define MyNewObjectType class' class_suite 關鍵詞是class,緊接著是一個類名,隨後是定義類的類體程式碼 o

Python核心程式設計13 面向物件程式設計 練習

13-3.對類進行定製。 寫一個類,用來將浮點型值轉換為金額。 class MoneyFmt(object): def __init__(self, value=0.0): self.value = float(value) def upd

面向物件程式設計

Python3.5筆記 第8章 面向物件程式設計 面向物件術語介紹 類:用來描述具有相同屬性和方法的物件的集合。類定義中集合了每個物件共有的屬性和方法。物件是類的示例。 類變數(屬性):類屬性在整個例項化的物件中是公用的。類變數定義在類中,且在方法之外。類常亮

Java學習之——面向物件程式設計

學習面向物件(OOP)內容的三條主線 1.java類及類的成員 2.面向物件的三大特徵(封裝 Encapsulation,繼承 Inheritance,多型 Polymorphism) 3.其他關鍵字 OOP:Object Oriented Programming

8 面向物件程式設計

本章知識點: 1、類和物件; 2、屬性和方法; 3、繼承和組合; 4、類的多型性; 5、類的訪問許可權; 6、設計模式的應用; 內容: 8.1 面向物件的概念 1、用例圖2、活動圖3、狀態圖4、類圖5、序列圖和協助圖6、組建圖和部署圖 8.2 類和物件 8.2.1 類和物件的區別 8.

Kotlin極簡教程:7 面向物件程式設計

在前面的章節中,我們學習了Kotlin的語言基礎知識、型別系統、集合類以及泛型相關的知識。在本章節以及下一章中,我們將一起來學習Kotlin對面向物件程式設計以及函數語言程式設計的支援。 7.1 面向物件程式設計思想 7.1.1 一切皆是對映 《易

6 面向物件程式設計

本章內容  理解物件屬性  理解並建立物件  理解繼承 我們可以把 ECMAScript 的物件想象成散列表:無非就是一組名值對,其中值可以是資料或函式。 1 理解物件   建立自定義物件的最簡單方式就是建立一個 Object 的例項,然後再為它新增 屬性和

《C現代程式設計 面向物件

 3.2 C的模組化與面向物件 生成一個棧的結構體 ,包括棧的元素;棧的初始化newStack(),棧的壓入push(); 棧的取出pop() stack.h 檔案 #ifndef _STACK_H_ #define _STACK_H_ #include <s

Python-面向物件高階

# 面向物件高階 ## 一、 特性 特性是指的`property`. `property`這個詞的翻譯一直都有問題, 很多人把它翻譯為屬性, 其實是不恰當和不準確的. 在這裡翻譯成特性是為了和屬性區別開來. 屬性是指的`attribute`, 我們以前學習的例項變數和類變數是`attribute`,

6 面向物件

文章目錄 基本資料型別的包裝類 處理物件 列印物件和 toString 方法 == 和 equals 比較運算子 equals() 方法的重寫 類成員

5 面向物件

文章目錄 類和物件 定義類 定義屬性 定義方法 定義構造器 物件、引用和指標 物件的 this 引用 使用 this 呼叫構造方法

2 面向物件的設計原則(SOLID):6_開閉原則

6. 開閉原則(Open Closed Principle,OCP) 6.1 定義 (1)一個類應該對擴充套件開放,對修改關閉。要求通過擴充套件來實現變化,而且是在不修改己有的程式碼情況下進行擴充套件,也不必改動己有的原始碼或二進位制程式碼。 (2)在軟體生命週期內,變化是一個既定的事實

2 面向物件的設計原則(SOLID):5_迪米特法則

5. 迪米特法則(Law of Demeter,LoD) 5.1 定義 (1)應儘量減少其他物件之間的互動,物件只和自己的朋友交談,即對其他依賴的類越少越好(不要和太多的類發生關係)。 (2)儘量不要讓類和類之間建立直接的關係,這樣可減少類與類之間的依賴,降低類之間的耦合。 (3)一

2 面向物件的設計原則(SOLID):4_介面隔離原則(ISP)

4. 介面隔離原則(Interface Segregation Principle,ISP) 4.1 定義 (1)使用多個專門的介面,而不使用單一的總介面,即客戶端不應該依賴那些它不需要的介面。類間的依賴關係應該建立在最小介面上 (2)介面儘量細化,同時介面中的方法儘量少。每個介面中只包

2 面向物件的設計原則(SOLID):3_依賴倒置原則(DIP)

3. 依賴倒置原則(Dependence Inversion Principle,DIP) 3.1 定義 (1)要依賴抽象,不要依賴具體的實現類。簡單的說就是對抽象(或介面)進行程式設計,不要依賴實現進行程式設計,這樣就降低了客戶與實現模組間的耦合。包含3層含義:   ①高層模組不應依賴

2 面向物件的設計原則(SOLID):2_里氏替換原則(LSP)

2. 里氏替換原則(Liskov Substitution Principle,LSP) 2.1 定義 (1)所有使用基類的地方必須能透明地使用子類替換,而程式的行為沒有任何變化(不會產生執行結果錯誤或異常)。只有這樣,父類才能被真正複用,而且子類也能夠在父類的基礎上增加新的行為。也只有這樣

2 面向物件的設計原則(SOLID):1_單一職責原則(SRP)

1. 單一職責原則(Single Responsibility Principle,SRP) 1.1 單一職責的定義 (1)定義:一個類應該僅有一個引起它變化的原因。這裡變化的原因就是所說的“職責”。 (2)如果一個類有多個引起它變化的原因,也就意味著這個類有多個職責。即把多個職責耦合在

25天面向物件程式設計詳解之繼承

面向物件補充知識 面向物件概念 面向物件核心二字在與物件,物件就是特徵和技能的結合體,基於該思想程式設計就好比在建立一個世界,世界上的任何事物都是物件,你就好比是這個世界的上帝,這是一種基於上帝式的思維方式。 優點:擴充套件性強 缺點:程式設計的複雜度要遠遠高於面向過程 問題一:既然面向物件這麼好,我們之

26天面向物件程式設計之組合,多型,封裝

組合 人生三問: 什麼是組合  組合就是將一個物件A定義為另一個物件B的屬性。從而使得B不僅能夠訪問自己的屬性,還會具備A的屬性,就像是把物件A和物件B組合到一塊一樣。 為什麼要用組合  和繼承一樣為了減少類與類之間的程式碼冗餘。  問題來了既然已經有了繼承,為什麼還要有組合呢?主要是為了解決一些沒有父子關

Java學習之路 面向物件(1)

面向物件(1) 1、認識物件 (1)萬物皆物件。 (2)物件=特點或特徵(屬性)+行為或(方法)。 (3)物件由屬性和方法組成,一定要具體到個體上。 2、認識類 (1)類是一些具有共同屬性和方法的物件的一個抽象。 (2)類是一個概念,不是具體的一個物件。 (3)