Python面向?qū)ο缶幊讨惖姆庋b
1、封裝的理解
封裝(Encapsulation):屬性和方法的抽象
屬性的抽象:對類的屬性(變量)進(jìn)行定義、隔離和保護(hù)
分為私有屬性和公開屬性:
- 私有屬性:只能在類內(nèi)部訪問
- 公開屬性:可以通過類、對象名訪問
可以選擇公開或隱藏屬性,隱藏屬性的內(nèi)在機(jī)理
方法的抽象:對類的方法(函數(shù))進(jìn)行定義、隔離和保護(hù)
分為私有方法和公開方法:
- 私有方法:只能在類內(nèi)部訪問
- 公開方法:可以通過類、對象名訪問
可以選擇公開或隱藏方法,隱藏方法的內(nèi)部邏輯
- 目標(biāo)是形成一個(gè)對外可操作屬性和方法的接口
封裝就是讓數(shù)據(jù)和代碼稱為類的過程,表達(dá)為:類——屬性——方法
2、私有類屬性、公開類屬性、私有實(shí)例屬性和公開實(shí)例屬性
2.1 公開類屬性
公開類屬性就是類屬性,語法結(jié)構(gòu)
class ClassName: <類屬性名> = <類屬性初值> def __init__(self,[參數(shù)1], [參數(shù)2], ...[參數(shù)n]): self.<實(shí)例屬性名> = <實(shí)例屬性初值> ...
2.2 私有類屬性
私有類屬性只能當(dāng)前類進(jìn)行訪問,子類不能訪問。語法結(jié)構(gòu)
class ClassName: <__私有類屬性名> = <私有類屬性初值> def __init__(self,[參數(shù)1], [參數(shù)2], ...[參數(shù)n]): self.<實(shí)例屬性名> = <實(shí)例屬性初值> ...
.<類屬性>
或者<對象名>.<類屬性>
的方式訪問
有效保證了屬性維護(hù)的可控性
示例代碼如下:
class TestClass: __number = 0 def __init__(self, num_value): for i in range(num_value + 1): TestClass.__number += i @classmethod # 類方法 def sum_number(cls): return TestClass.__number value1 = TestClass(100) print(TestClass.sum_number()) # 5050 # print(value1.__number) # AttributeError: 'TestClass' object has no attribute '__number'
在類外賣訪問.__number
就會(huì)報(bào)出AttributeError
異常
2.3 公開實(shí)例屬性
公開實(shí)例屬性就等于示例屬性,語法結(jié)構(gòu)
class <類名>: <類屬性名> = <類方法值> def __init__(self, <參數(shù)列表>): self.<實(shí)例屬性名> = <實(shí)例屬性值> ...
2.4 私有實(shí)例屬性
私有實(shí)例屬性只能在當(dāng)前類內(nèi)部使用,子類也不能使用。語法結(jié)構(gòu)
class <類名>: <類屬性名> = <類方法值> def __init__(self, <參數(shù)列表>): self.<__私有實(shí)例屬性名> = <實(shí)例屬性值> ...
.<類屬性>
或者<對象名>.<類屬性>
的方式訪問
有效保證了屬性維護(hù)的可控性
示例代碼:
class TestClass: def __init__(self, num_value): self.__number = 0 for i in range(num_value + 1): self.__number += i def sum_number(self): return self.__number value1 = TestClass(100) print(value1.sum_number()) # 5050 # print(value1.__number) # AttributeError: 'TestClass' object has no attribute '__number'
2.5 私有屬性不一定真的私有
私有屬性的雙下劃線只是一種轉(zhuǎn)換約定,轉(zhuǎn)換后,類內(nèi)原有名字發(fā)生了變化,這是一種形式上的私有
示例代碼:
class TestClass: def __init__(self, num_value): self.__number = 0 for i in range(num_value + 1): self.__number += i def sum_number(self): return self.__number value1 = TestClass(100) print(value1.sum_number()) # 5050 print(value1._TestClass__number) # 5050 # 可以通過 對象名._類名__屬性 的方式來訪問
可以通過對象名._類名__屬性的方式來訪問。
3、私有方法和公開方法
定義方法是在類內(nèi)部定義并使用的方法。語法結(jié)構(gòu)
class <類名>: def <__私有方法名>(self, <參數(shù)列表>): ...
私有方法定義的時(shí)候?qū)傩悦智懊嫘枰獌蓚€(gè)下劃線( __
).
各類方法都可以通過增加雙下?lián)Q線的方式將方法變?yōu)樗接蟹椒?/p>
私有方法在形式上保護(hù)了Python
類內(nèi)部使用的函數(shù)邏輯
私有屬性與公開是程序員邏輯,不是安全邏輯,重視約定
4、類的保留屬性
Python
解釋器預(yù)留的類屬性,以雙下?lián)Q線開頭或者結(jié)尾。
- 保留屬性也叫特殊屬性
- 以雙下劃線開頭和結(jié)尾
- 作用是為理解
Python
類提供了統(tǒng)一的屬性接口 - 屬性值具有特殊的含義,類定義后直接使用
僅用<類名>
訪問的保留屬性
保留屬性 | 描述 |
---|---|
__name__ | 類的名詞 |
__qualname__ | 以.分隔從模板全局命名空間開始的類名稱 |
__bases__ | 類所繼承的基類名稱 |
5、類的保留方法
保留方法是Python
解釋器預(yù)留的方法,以雙下劃線開頭和結(jié)尾
- 保留方法也叫特殊方法
- 以雙下劃線開頭和結(jié)尾
- 作用是為理解
Python
類提供了統(tǒng)一的方法接口 - 方法邏輯:具有特定的含義,一般與操作符關(guān)聯(lián),類定義需要重載
到此這篇關(guān)于Python面向?qū)ο缶幊讨惖姆庋b的文章就介紹到這了,更多相關(guān)Python類的封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django中使用CORS實(shí)現(xiàn)跨域請求過程解析
這篇文章主要介紹了Django中使用CORS實(shí)現(xiàn)跨域請求過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08將 Ubuntu 16 和 18 上的 python 升級到最新 python3.8 的方法教程
這篇文章主要介紹了如何將 Ubuntu 16 和 18 上的 python 升級到最新 3.8 版,本文通過實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03matplotlib之pyplot模塊坐標(biāo)軸范圍設(shè)置(autoscale(),xlim(),ylim())
這篇文章主要介紹了matplotlib之pyplot模塊坐標(biāo)軸范圍設(shè)置(autoscale(),xlim(),ylim()),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Django網(wǎng)絡(luò)框架之HelloDjango項(xiàng)目創(chuàng)建教程
這篇文章主要介紹了Django網(wǎng)絡(luò)框架之HelloDjango項(xiàng)目創(chuàng)建,結(jié)合實(shí)例形式詳細(xì)分析了Django框架創(chuàng)建HelloDjango項(xiàng)目的具體步驟與詳細(xì)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-06-06利用python模擬sql語句對員工表格進(jìn)行增刪改查
這篇文章主要給大家介紹了關(guān)于利用python模擬sql語句實(shí)現(xiàn)對員工表格進(jìn)行增刪改查的相關(guān)資料,文中介紹了詳細(xì)的需求以及示例代碼,對大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-07-07