本文來自於千鋒教育在阿里雲開發者社區學習中心上線課程《Python入門2020最新大課》,主講人姜偉。
私有屬性和方法的使用
在實際開發中,對象的某些屬性或者⽅法可能只希望在對象的內部別使⽤,⽽不希望在外部被訪問到,這時就可以定義私有屬性和私有⽅法。
定義⽅法
在定義屬性或⽅法時,在屬性名或者⽅法名前增加兩個下劃線 __
,定義的就是私有屬性或⽅法。
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
self.__money = 2000 # 使⽤ __ 修飾的屬性,是私有屬性
def __shopping(self, cost):
self.__money -= cost # __money 只能在對象內部使⽤
print('還剩下%d元'%self.__money)
def test(self):
self.__shopping(200) # __shopping ⽅法也只能在對象內部使⽤
p = Person('張三',18)
# print(p.__money) 這⾥會報錯,不能直接訪問對象內部的私有屬性
p.test()
# p.__shopping() 這⾥會報錯,__shopping 只能在對象內部使⽤,外部⽆法訪問
訪問私有屬性和⽅法
私有屬性不能直接使⽤,私有⽅法不能直接調⽤。但是,通過⼀些代碼,我們也可以在外部訪問⼀個對象的私有屬性和⽅法。
直接訪問
使⽤⽅式:在私有屬性名或⽅法名前添加 _類名
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
self.__money = 2000
def __shopping(self, cost):
self.__money -= cost
p = Person('李四',20)
print(p._Person__money) # 使⽤對象名._類名__私有屬性名 可以直接訪問對象的私有屬性
p._Person__shopping(100) # 使⽤對象名._類名__函數名 可以直接調⽤對象的私有⽅法
print(p._Person__money)
注意:在開發中,我們強烈不建議使⽤ 對象名._類名__私有屬性名 的⽅式來訪問對象的私有屬性!
定義⽅法訪問私有變量
在實際開發中,如果對象的變量使⽤了 __
來修飾,就說明它是⼀個私有變量,不建議外部直接使⽤和修改。如果硬要修改這個屬性,可以使⽤定義 get
和 set
⽅法這種⽅式來實現
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
self.__money = 2000 # __money 是私有變量,外部⽆法訪問
def get_money(self): # 定義了get_money ⽅法,在這個⽅法⾥獲取到 __money
return self.__money # 內部可以訪問 __money 變量
def set_money(self,money): # 定義了set_money ⽅法,在這個⽅法⾥,可以修改 __money
self.__money = money
p = Person('王五',21)
# 外部通過調⽤ get_money 和 set_money 這兩個公開⽅法獲取和修改私有變量
print(p.get_money())
p.set_money(8000)
print(p.get_money())
使用property方式來獲取(暫時先不講解)