tft每日頭條

 > 科技

 > python基礎面向對象

python基礎面向對象

科技 更新时间:2024-08-04 05:08:17

本系列内容所用Python版本為anaconda,直接浏覽器搜索下載安裝即可!


前面内容我有多次提到過對象這個概念,今天我想專門出一期内容,淺談一下Python的對象這一基礎概念,并談談我對面向對象編程這一編程思想的理解,希望對後續内容的學習能起到一點幫助。

一、Python對象

簡單來說對象就是具體的實例。像字符串'lcm',當他被創建的時候,他就是一個字符串對象,是實際存在的,并不是抽象的

那麼對象是怎麼來的

首先要搞明白用于描述對象特征的數據信息稱為該對象的屬性,而存取屬性的函數叫做方法,是該對象與外界溝通的接口,具有相同屬性和方法的對象構成類,換言之類是對象抽象化而形成的概念,而對象則是類的具體實例,例如股票對象貴州茅台就是股票這個類的具體實例,面向對象編程有三大特征:封裝、繼承、多态

1.創建對象

搞清楚了對象是類的實例後,就明白想要創建對象先要有類,創建類的代碼形式同函數一樣,由class關鍵字打頭,随後是類的名稱以及繼承類的名稱,并以冒号(:)結尾,以下是類的一般創建形式

python基礎面向對象(Python基礎之對象面向對象編程)1

括号表示繼承自哪一類,如果沒有則填object,這是所有類繼承的源頭

有了類之後就可以創建具體的實例對象了

python基礎面向對象(Python基礎之對象面向對象編程)2

我們創建了一個對象asset1,它來自于Asset類

Python可以動态綁定實例對象的屬性

python基礎面向對象(Python基礎之對象面向對象編程)3

就這樣我們給對象asset2、asset3分别綁定了名字和價格屬性

以上案例演示了源自同一類的不同實例,藉由動态綁定的方法擁有不同屬性,雖然方便,但有悖于把類視為實體的模闆之慣例,若我們希望創建自同一個類的實例擁有一些共同特征,可以藉由定義一個特殊的__init__方法,來綁定一些在創建實例時必不可少的屬性。

python基礎面向對象(Python基礎之對象面向對象編程)4

我們創建了一個Asset類,它有名字和價格兩個屬性,創建具體實例時必須傳入這兩個屬性

2.封裝

若要打印出具體對像的某個屬性,可以創建一個打印函數

python基礎面向對象(Python基礎之對象面向對象編程)5

以下是示例

python基礎面向對象(Python基礎之對象面向對象編程)6

但是price屬于asset4這個對象的内部屬性,從軟件設計的角度考量,有些屬性可能帶有重要信息,像上例輕松從外部函數直接訪問内部屬性,并不好,比較理想的方法是把屬性和訪問屬性的方法放在同一個對象當中

python基礎面向對象(Python基礎之對象面向對象編程)7

在類中定義的方法可以用“實例.方法”的方式直接調用

python基礎面向對象(Python基礎之對象面向對象編程)8

把方法寫在對象内部仍然無法阻止對象屬性被輕易獲取,因為“對象.屬性名”依然可以打印出對象的屬性,為了對對象的屬性提供更加安全的保障,我們在創建對象實例時,在對象屬性名字前面加上兩個下劃線,以表示這個屬性為private(私有的)屬性,這樣通過“對象.屬性名”就無法訪問,隻能通過内部方法訪問

python基礎面向對象(Python基礎之對象面向對象編程)9

給Asset對象的價格屬性加密

python基礎面向對象(Python基礎之對象面向對象編程)10

通過“對象.屬性”訪問對象的price屬性時報錯,因為這個屬性加密了,而訪問name屬性時則不報錯

相較于直接從外部訪問對象的屬性,這種把訪問方法封裝在對象的内部的好處是,它可以賦予方法一些規範,例如如果想要修改對象的屬性,可以直接把修改方法寫在對象内部

3.繼承

繼承的思想是在已有的類的基礎上,盡可能的多重複去利用它。原有的類稱為父類,根據父類衍生出來的類稱為子類,一個父類可以衍生出無數個子類,換言之父類是由所有子類抽象而來的,子類一旦繼承父類便擁有了父類的屬性和方法,并可以視情況增添修改

下面我們創建新的類,他繼承自上面的Asset

python基礎面向對象(Python基礎之對象面向對象編程)11

子類Asset1增加了修改價格方法

4.多态

同一操作作用于不同的對象,可以有不同的解釋,産生不同的執行結果,這就是多态性

二、面向對象編程

面向對象編程是相對于面向過程編程而言的,我的理解是,Python面向對象編程是通過不同的方法作用于不同的對象,通過對對象的一系列操作實現目的編程思想

好了,就到這裡。今天的内容簡單向大家介紹了一下Python的對象概念,以及面向對象編程的編程思想,非常淺顯,但我相信有個基本的了解,對以後的學習肯定是有幫助的。

END

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved