python雖然是解釋型語言,但從設計之初就已經是一門物件導向的語言,對於python來說一切皆為物件。正因為如此,在python中建立乙個類和物件是很容易的,當然如果習慣面向過程或者函式的寫法也是可以的,python並不做硬性的限制。
在很多場景,我們都需要封裝乙個物件類,這樣操作起來很方便快捷,接下來一步一步的和大家分享一下python是怎麼樣封裝類的。
版本一:
封裝乙個類,最基本的就是「init」方法,當建立乙個物件時,就是呼叫「init」方法,根據傳遞的來初始化物件的值。
class person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
if __name__ == "__main__":
person = person("張三", 12, "男")
print(person)
執行測試一下:
測試輸出新建person的物件,發現輸出的是一串位址,這樣不利於我們直接觀察。封裝成物件還滿足不了我們的需求,所以我們需要對版本進行一下公升級
版本二:
那我們想要檢視物件的值要怎麼辦呢?很簡單,重寫__str__方法。
原因:當我們print乙個物件時,系統會呼叫預設的__str__方法,輸出的是一串位址,但是不利於我們直接觀察,所以我們需要根據我們自己的需求重寫__str__方法。
class person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def __str__(self):#該方法可以根據自己的需求重寫,沒有固定的模式
return "姓名:{},年齡:{},性別:{}".format(self.age, self.age, self.gender)
if __name__ == "__main__":
person = person("張三", 12, "男")
print(person)
再次執行測試:
這樣看起來就直觀多了
版本三:
模擬這樣乙個場景:以相同的引數,初始化了兩個物件,比較這兩個物件是否相等,我們先通過**實現一下:
class person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def __str__(self):
return "姓名:{},年齡:{},性別:{}".format(self.age, self.age, self.gender)
if __name__ == "__main__":
person = person("張三", 12, "男")
person1 = person("張三", 12, "男")
print(person == person1)
測試結果:
結果顯示,兩個物件並不相等
但是從比較人性化的方面來講,他們的值是相同,應該是相等的,而這也是我們的需求,需求有了,就可以根據需求來公升級版本了。
我們只需要重寫__eq__方法就行了,原因是當比較兩個物件是否相等時,系統會呼叫預設的__eq__方法,而我們只需要根據自己的需求重寫__eq__方法。
class person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def __str__(self):
return "姓名:{},年齡:{},性別:{}".format(self.age, self.age, self.gender)
def __eq__(self, other) -> bool:
return (self.name == other.name) and (self.age == other.age) and (self.gender == other.gender)
if __name__ == "__main__":
person = person("張三", 12, "男")
person1 = person("張三", 12, "男")
print(person == person1)
測試執行結果:
這次是我們想要的結果了。
以上就是我們平常的需要最多的幾個需求。
python物件封裝 Python物件封裝安全性
您不應該真正依賴private,public等來保證安全性 如 防止惡意 和外部威脅 它們的本意是防止程式設計師朝自己的腳開槍,而不是作為 計算機 安全措施。你也可以輕鬆訪問c 物件的私有成員字段,只要你繞過靜態編譯器檢查,直接進入記憶體,但是你會說c 缺少真正的封裝嗎?在 最好的辦法是在單獨的程序...
Python中用類實現物件和封裝
用類實現物件和封裝 物件 對應客觀世界的事物,將描述事物的一組資料和與這組資料有關的操作封裝在一起,形成乙個實體,這個實體就是物件 類 具有相同或相似性質的物件的抽象就是類 forexample 汽車是乙個類,則具體一輛汽車就是乙個物件 物件導向程式設計的特點 1.封裝性 封裝是指將資料與具體操作的...
類和物件封裝
屬性和行為 案例 設計學生類 訪問許可權 class 和 struct 的區別 成員屬性私有化 設計案例1 立方體類 設計案例2 點和圓關係 1 屬性和行為 includeusing namespace std const double pi 3.14 c 物件導向的三大特性 封裝 繼承 多型 萬事...