Python 封裝的實現

2021-09-25 19:49:56 字數 3217 閱讀 6040

1.更改屬性名

# 封裝是物件導向的三大特性之一

# 封裝指的是隱藏物件中一些不希望被外部所訪問到的屬性或方法

# 如何隱藏乙個物件中的屬性?

# - 將物件的屬性名,修改為乙個外部不知道的名字

# 如何獲取(修改)物件中的屬性?

# - 需要提供乙個getter和setter方法使外部可以訪問到屬性

# - getter 獲取物件中的指定屬性(get_屬性名)

# - setter 用來設定物件的指定屬性(set_屬性名)

# 使用封裝,確實增加了類的定義的複雜程度,但是它也確保了資料的安全性

# 1.隱藏了屬性名,使呼叫者無法隨意的修改物件中的屬性

# 2.增加了getter和setter方法,很好的控制的屬性是否是唯讀的

# 如果希望屬性是唯讀的,則可以直接去掉setter方法

# 如果希望屬性不能被外部訪問,則可以直接去掉getter方法

# 3.使用setter方法設定屬性,可以增加資料的驗證,確保資料的值是正確的

# 4.使用getter方法獲取屬性,使用setter方法設定屬性

# 可以在讀取屬性和修改屬性的同時做一些其他的處理

# 5.使用getter方法可以表示一些計算的屬性

class dog:

'''表示狗的類

'''def __init__(self , name , age):

self.hidden_name = name

self.hidden_age = age

def say_hello(self):

def get_name(self):

'''get_name()用來獲取物件的name屬性

'''

# print('使用者讀取了屬性')

return self.hidden_name

def set_name(self , name):

# print('使用者修改了屬性')

self.hidden_name = name

def get_age(self):

return self.hidden_age

def set_age(self , age):

if age > 0 :

self.hidden_age = age

d = dog('旺財',8)

# d.say_hello()

# 呼叫setter來修改name屬性

d.set_name('小黑')

d.set_age(-10)

# d.say_hello()

print(d.get_age())

2.按標準更改屬性名

# 可以為物件的屬性使用雙下劃線開頭,__***

# 雙下劃線開頭的屬性,是物件的隱藏屬性,隱藏屬性只能在類的內部訪問,無法通過物件訪問

# 其實隱藏屬性只不過是python自動為屬性改了乙個名字

# 實際上是將名字修改為了,_類名__屬性名 比如 __name -> _person__name

# class person:

# def __init__(self,name):

# self.__name = name

# def get_name(self):

# return self.__name

# def set_name(self , name):

# self.__name = name

# p = person('孫悟空')

# print(p.__name) __開頭的屬性是隱藏屬性,無法通過物件訪問

# p.__name = '豬八戒'

# print(p._person__name)

# p._person__name = '豬八戒'

# print(p.get_name())

# 使用__開頭的屬性,實際上依然可以在外部訪問,所以這種方式我們一般不用

# 一般我們會將一些私有屬性(不希望被外部訪問的屬性)以_開頭

# 一般情況下,使用_開頭的屬性都是私有屬性,沒有特殊需要不要修改私有屬性

class person:

def __init__(self,name):

self._name = name

def get_name(self):

return self._name

def set_name(self , name):

self._name = name

p = person('孫悟空')

print(p._name)

3.使用property修飾器

class person:

def __init__(self,name,age):

self._name = name

self._age = age

# property裝飾器,用來將乙個get方法,轉換為物件的屬性

# 新增完property裝飾器以後,我們就可以像呼叫屬性一樣使用get方法

# 使用property裝飾的方法,必須和屬性名是一樣的

@property

def name(self):

print('get方法執行了~~~')

return self._name

# setter方法的裝飾器:@屬性名.setter

@name.setter

def name(self , name):

print('setter方法呼叫了')

self._name = name

@property

def age(self):

return self._age

@age.setter

def age(self , age):

self._age = age

p = person('豬八戒',18)

p.name = '孫悟空'

p.age = 28

print(p.name,p.age)

python實現運算元據庫的方法封裝

常見的資料庫操作的方法封裝 import pymysql class dbfunc def init self,host,port,user,pwd,name,charset self.host host self.port port self.user user self.pwd pwd self...

python封裝繼承 python繼承 封裝

python繼承 封裝 1 為什麼要封裝 封裝資料的主要原因是 保護隱私 封裝方法的主要原因是 隔離複雜度 2 封裝分為兩個層面 第乙個層面的封裝 什麼都不用做 建立類和物件會分別建立二者的命名空間,我們只能用類名.或者obj.的方式去訪問裡面的名字,這本身就是一種封裝 r1.nickname 草叢...

python物件封裝 Python物件封裝安全性

您不應該真正依賴private,public等來保證安全性 如 防止惡意 和外部威脅 它們的本意是防止程式設計師朝自己的腳開槍,而不是作為 計算機 安全措施。你也可以輕鬆訪問c 物件的私有成員字段,只要你繞過靜態編譯器檢查,直接進入記憶體,但是你會說c 缺少真正的封裝嗎?在 最好的辦法是在單獨的程序...