面向對象的設計方法裡面,最重要的兩條,一條是代碼復用,通過繼承的權限設置進行封裝。
Python的類封裝和C++的定義類似,只是不用關鍵字。但是他的類型的定義沒有C++豐富嚴格。
CSDN的這篇視頻很簡單清晰的表現了這個設計思想。但是,視頻不方便查閱,所以,這裡重寫了一下。
CSDN的視頻裡面給出的定義:
【xx】
【_xx】
【__xx】
class Apple():
def name(self,name):
self.__name = name
def getName(self):
return self.__name
這裡添加了一個私有的屬性name,同時設定了一訪問函數,getName去訪問他。
class Apple():
def __setAge(self,age):
self.__age = age
def getName(self):
return self.__name
def info(self,age):
self.__setAge(age);
和私有的類一樣,可以定義私有的方法.私有方法的調用,在類的定義內,需要給予前綴【self.】,直接調用會報錯
對應技能樹普遍不能運行的情況,自己編寫了一個范例:
【案,這個例子裡,我寫了兩個私有的屬性sex,和Married,一個私有函數__SetPrivateMarriedx】
【直接調用私有屬性,例如,源碼中,person.__sex = “男人”,並不能改變性別的屬性,仍然是女人,直到調用了我們預設的接口訪問函數SetSex,在文章的最後,我們嘗試調用私有函數,結果報錯,說明了數據訪問的權限被有效的保護了。
person.__SetPrivateMarriedx(“Yes”)】
class People():
def __init__(self,name,work,sex,Married):
self.name = name
self.work = work
self.__sex = sex
self.__Married = Married
def Spyname(self,Spyname):
self.__name = Spyname
def getName(self):
return self.__name
def SetSex(self,Sex):
self.__sex = Sex
self.__SetPrivateMarriedx("Yes")
def __SetPrivateMarriedx(self,Married):
self.__Married = Married
def show(self):
print("姓名",self.name)
print("職務",self.work)
print("性別",self.__sex)
print("婚姻",self.__Married)
person=People("普通人","good","女人","no")
person.show()
person.name = "俞敏洪"
person.work = "新東方老板"
person.__sex = "男人"
person.show()
person.SetSex("男人")
person.show()
person.__SetPrivateMarriedx("Yes")
姓名 普通人
職務 good
性別 女人
婚姻 no
姓名 俞敏洪
職務 新東方老板
性別 女人
婚姻 no
姓名 俞敏洪
職務 新東方老板
性別 男人
婚姻 Yes
AttributeError Traceback (most recent call last)
in
41 person.show()
42
—> 43 person.__SetPrivateMarriedx(“Yes”)
44
AttributeError: ‘People’ object has no attribute ‘__SetPrivateMarriedx’