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 缺少真正的封裝嗎?在 最好的辦法是在單獨的程序...