物件導向_封裝
物件導向的核心: 類和物件
類:型別,資料型別 從物件中抽取出來的乙個抽象概念
定義某種型別的特徵和行為操作
物件:通過某個指定的類建立出來的具體屬性和具體行為的實體
乙個類可以建立多個物件,多個物件可以屬於乙個型別
類操作語法:
class 型別名稱(駝峰命名法):
def__init___(self,name[屬性引數列表]):
self.name = name
def 方法名稱(self, 方法引數列表)
物件導向的封裝:
1.資料封裝:將程式中需要的資料
按照統一的格式封裝在型別的內部,通過該型別的物件
包裝使用資料!
2.行為封裝[方法]
3.屬性封裝(重點)
物件的屬性操作,必須通過方法操作
通過方法限制屬性的訪問,提高屬性的安全性
通過專案的規範,規定了乙個下劃線開頭的屬性
是屬於物件的私有屬性,不能在型別的外部呼叫
通過語法限制,讓屬性私有化,不讓外界直接訪問
python中規定的,兩個下劃線開頭的屬性是私有的
語法上外界不能直接訪問
總結封裝:
在python中,封裝按照如下步驟進行操作
(1) 定義型別,所有屬性私有化[雙下劃線開頭]
(2) 每個屬性提供set/get方法[賦值/取值]
命名規範:賦值:set_屬性名稱(..)
取值:get_屬性名稱(..)
(3) 在get/set方法中,提供限制條件!
封裝高階操作
儘管屬性資料已經被封裝,但是操作過程[通過方法操作屬性]直接暴露給開發人員
本來操作乙個屬性~就是乙個變數的賦值取值;轉變成方法操作之後,已經失去了屬性的概念!
python提供了一種特殊的操作,可以完成將方法轉換成屬性訪問的操作模式
@property新增獲取屬性的方法,方法的操作模式更改為變數操作模式
@方法.setter 新增設定屬性的方法,方法的操作模式更改為變數操作模式
class user:
....
@property
def name(self):
return self.__name
@name.setter
def name(self, name)
self.__name = name
方法二次封裝
class user:
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
def del_name(self):
del self.__name
# 訪問屬性的中間變數,通過變數name可以間接操作屬性__name
name = property(get_name, set_name, del_name)
屬性的擴充套件和限制
python中物件的屬性可以通過物件進行自由擴充套件
但是自由擴充套件會導致**的可讀性和操作性的下降,所以通過
指定的限制條件規範擴充套件屬性的定義,完成定義和擴充套件的平衡
class user:
__slots__ = ["__name", "age", "gender"]
Python 物件導向,封裝
封裝來了 封裝是啥?封裝就好像把你需要的東西裝到盒子裡然後用封口膠把空封起來。照這種邏輯看,封裝 隱藏 哪在python中怎麼看出來隱藏呢?在python中用雙下劃線開頭的方式將屬性隱藏起來 設定成私有的 類中所有雙下劃線開頭的都會自動變形成 類名 x的形式 就是把函式跟方法給封裝起來 定義裡兩個類...
python 物件導向 封裝
1.私有屬性 class person object def init self,name,age self.name name self.age age 例項屬性 self.attack val 30self.life val 100 前面加兩個下劃線就是私有變數,私有屬性 a person wd...
Python物件導向04 物件導向封裝案例
封裝是物件導向程式設計的一大特點 物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 外界使用類建立物件,然後讓物件呼叫方法物件方法的細節都被封裝在類的內部需求 小明體重75.0公斤 小明每次跑步會 0.5公斤 小明每次吃東西體重增加1公斤 class person 人類 def init ...