python 繼承的規則

2021-09-26 10:06:57 字數 4018 閱讀 4534

本文講述python繼承規則。

先來看一些概念:

物件導向的概念

簡單地說 物件導向程式設計(object oriented programming)簡稱oop就是使我們分析、設計 和實現乙個系統的方法盡可能地接近我們認識乙個系統的方法。

1、描述物件之間的相互作用 。

2、物件導向的方法包括,物件導向的分析(ooa, object-oriented analysis)

物件導向的設計(ood, object-oriented design)、物件導向的程式設計(oop, object-oriented program)

3、物件導向技術主要圍繞以下幾個概念,物件、抽象資料型別、類、型別層次(子類)、繼承性、多型性。

對比:

面向過程

過程化設計先確定演算法,再確定資料結構;面向過程的程式設計師習慣於建立資料結構存放數 據並定義方法(函式)來運算元據;

物件導向

物件導向程式設計先確定資料結構,再確定演算法;而物件導向程式設計師則構造物件模型,將資料 與方法組織在一起。

物件導向程式設計方法的優點可重用性 可擴充套件性 可管理性

抽象:對具體問題(物件)進行概括,抽出這一類物件的 公共性質並加以描述的過程。要求:先注意問題的本質及描述,其次是實現過程或細節。

資料抽象—描述某類物件的屬性或狀態(物件相互區別的 物理量)

**抽象—描述某類物件的共有的行為特徵或具有的功 能。

:是描述物件的「基本原型」,它定義一類物件所能擁有的數 據和能完成的操作。

在物件導向的程式設計中,類是程式的基本單元。相似的物件可以歸併到同乙個類中去,就像傳統語言中的 變數與型別關係一樣。

從程式設計的角度看,類是物件導向程式中最基本的程式單元,類實質上定義的是一種數 據型別,這種資料型別就是物件型別,我們可以使用類名稱來宣告物件變數。

物件:它是具有該類型別的乙個特定的個體,是類的乙個 變數。

物件的構造過程:1.為物件開闢空間; 2.呼叫構造方法初始化; 3.返回物件的引用。

類是物件的模板,同乙個類可以建立多個物件,每個物件 有各自的記憶體空間,不會互相影響

在python中定義私有變數只需要在變數名或函式名前加 上」__「兩個下劃線,那麼這個函式或變數就是私有的了。

1、_***"單下劃線 " 開始的成員變數叫做保護變數,意思是只有類例項和子類例項能訪問到這些變數。

2、__***類中的私有變數/方法名 (python的函式 也是物件,所以成員方法稱為成員變數也行得通。), " 雙下劃線 " 開始的是私有成員,意思是只有類物件自己 能訪問,連子類物件也不能訪問到這個資料。

3、)__***__系統定義名字,前後均有乙個「雙下劃線」 代表python裡特殊方法專用的標識,如__init__()代表 類的建構函式。

封裝:行為和屬性的結合。

含義:提供將所抽象出的問題的屬性(資料成員)和行為 (**成員)相組合的一種機制,它能將這二類成員再組 合在一起,形成物件或實體。

目的:增強使用的安全性,使用者不必了解具體的實現細 節,而只需要通過設計者提供的外部介面來操作它。 優點:實現高度模組化,從而產生出軟體構件(控制項); 利用控制項快速地組裝程式。 客戶可以呼叫乙個並不了解內部機制的物件的方法 任何關於內部的改動對客戶來說都是隱藏的。

繼承:繼承是由已有的類建立新類的機制。由繼承得到的類稱為子類(派生類),被繼承的類稱為父類 (超類)(基類)。

繼承的原則 :

1、子類繼承父類的成員變數和成員方法

2、子類不繼承父類的構造方法,能夠繼承父類的析構方法

3、子類不能刪除父類的成員,但可以重定義父類成員

4、子類可以增加自己的成員

繼承的作用 :

1、實現軟體可重用的重要方式

2、增強軟體可擴充性

3、提高軟體的可維護性

物件導向中的兩個重要概念:抽象和分類

抽象和分類是人們認識世界的基本方法:

抽象是將現實世界中客觀存在的事務對映到意識中的一種 方法。

分類是指確定這些抽象到意識中的概念之間的關係。

這些關係的基本形式包括一般到特殊和整體與區域性。

在物件導向中,一般到特殊的關係用繼承(inheritance)表 示;整體與區域性的關係用組合(composition)表示。(在之前的部落格中也將到這個問題)

super()用法 :

1、super()用來引用當前物件的父類,用super()可以實現對 父類成員的訪問。

訪問父類被隱藏的成員變數,如:super().variable

2、呼叫父類中被覆蓋的方法,如:super().method([paramlist])

3、呼叫父類的建構函式,如:super.__init__([paramlist])

多型

乙個物件在不同的情況下,具有不同的形態,用於強型別 語言。是使用在繼承和介面中實現。

多型:定義時的型別和執行時的型別不一樣,此時就成為 多型

python中的多型主要得益於python的鴨子型別,之前的部落格中講過,這裡不再多說。

多型的作用: 提高程式的擴充套件性

例項屬性,類屬性/方法,靜態方法 :

類屬性 :直接在類中定義的,與方法平齊,不在方法裡的屬性就是 類屬性

例項屬性 :在方法裡通過self.屬性 都是例項屬性 。

類屬性就是類物件所擁有的屬性,它被所有類物件的例項 物件所共有,在記憶體中只存在乙個副本,這個和c++中類 的靜態成員變數有點類似。

對於公有的類屬性,在類外可以通過類物件和例項物件訪 問。

類方法:是類物件所擁有的方法,需要用修飾器@classmethod

(註解、元資料)來標識其為類方法,對於類方法,第一 個引數必須是類物件,一般以cls作為第乙個引數(當然可 以用其他名稱的變數作為其第乙個引數,但是大部分人都 習慣以』cls『作為第乙個引數的名字,就最好用』cls'了),能 夠通過例項物件和類物件去訪問。

靜態方法 :

需要通過修飾器@staticmethod來進行修飾,靜態方法不 需要多定義引數。

從類方法和例項方法以及靜態方法的定義形式就可以看出 來, 類方法的第乙個引數是類物件cls,那麼通過cls引用的必定 是類物件的屬性和方法;

而例項方法的第乙個引數是例項物件self,那麼通過self引 用的可能是類屬性、也有可能是例項屬性(這個需要具體 分析),不過在存在相同名稱的類屬性和例項屬性的情況 下,例項屬性優先順序更高。

靜態方法中不需要額外定義引數,因此在靜態方法中引用 類屬性的話,必須通過類物件來引用。

總結 :

方法是**重用的重要手段,控制好**被訪問的程度 可以加強**的安全性, 封裝、繼承和多型是物件導向的基本特徵 ,封裝特性通過訪問許可權的設定將類的實現細節隱藏,提供 介面供外部訪問 ,繼承和組合是類間的基本關係,是軟體復用的重要方法 ,多型是物件導向的重要標誌。

python中類的繼承規則

python的類可以繼承多個類,如果繼承多個類,那麼其尋找方法的方式有 深度優先和廣度優先 基類或者父類繼承了object類,那麼該類就是新式類,否則便是經典類 當類是經典類時,多繼承情況下,會按照深度優先方法查詢 當類時新式類時,多繼承情況下,會按照廣度優先方法查詢 class a object ...

類的繼承規則

class su born city jiangsu wearing thick def diet self print 我們愛吃甜。class yue settle city guangdong wearing thin def diet self print 我們吃得清淡。class yuesu...

C 繼承的訪問規則

通過基類的物件,就只能訪問該類的公有成員,派生類可以繼承基類中除了建構函式和析構函式之外的成員,但這些成員的訪問屬性在派生過程中是可以調整的。基類的建構函式和析構函式不能被繼承 先看 這是乙個繼承的訪問規則的問題 下面 通過windows7下的dev c 的正常執行 include class ba...