国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python面向對象編程(2)——深入類的屬性

2019-11-06 07:38:13
字體:
來源:轉載
供稿:網友
2 深入類的屬性2.1 同名的類屬性與實例屬性     在使用實例名.屬性名應用時,優先引用實例屬性     使用類名.屬性名時,只能引用類屬性classClassAttrDemo1:    a=10   def__init__(self):       self.a=20       self.b=20   cad1=ClassAttrDemo1()PRint("example attribute:",cad1.a)print("class attribute:",ClassAttrDemo1.a)print("error:",ClassAttrDemo1.b)2.2%20屬性訪問的特殊方法(反射) %20 %20 字符串操作類的屬性/方法 %20 %20 主要工具函數:has_attr(obj_name,'屬性')、set_attr(obj_name,'屬性','值')、get_attr(obj_name,'屬性','值')classClassAttrDemo1:   %20a=10   def__init__(self):       self.a=20       self.b=20   cad1=ClassAttrDemo1()#%20print("example%20attribute:",cad1.a)#%20print("class%20attribute:",ClassAttrDemo1.a)#print("error:",ClassAttrDemo1.b)print("example%20attribute%20value:",getattr(cad1,'a'))setattr(cad1,'a',80)print("changed%20attribute%20value:",getattr(cad1,'a'))print("attributexit:",hasattr(cad1,'c'));2.3 屬性包裝     將方法包裝為屬性,隱藏相關實現(控制屬性類型或范圍、虛擬屬性)     三種屬性操作:@property(可讀)、@<property-name>.setter(可寫)、@<property-name>.delete(可刪除)# -*- coding:utf-8 -*-classWasher:   def__init__(self,water=10,scour=2):       self._water=water#_water為私有屬性       self.scour=scour       self.year=2012   #方法包裝為屬性     @property   defwater(self):       returnself._water      #可寫   @water.setter   defwater(self,water):       if0<water<200:           self._water=water       else:           print("set water failure...")      #虛擬屬性          @property   deftotal_year(self):       return2017-self.year      defset_water(self,water):       self.water=water      defset_scour(self,scour):       self.scour=scour      defadd_water(self):       print("add water:",self.water)          defadd_scour(self):       print("add scour:",self.scour)      defstart_wash(self):       self.add_water()       self.add_scour()       print("start wash ...")       if__name__ =='__main__':    w=Washer(20,5)   print(w.water)    w.water=25   print(w.water)    w.water=222   print(w.water)   print(w.total_year)2.4 描述符實現特殊協議方法的類作為另一個類的類屬性攔截和控制屬性訪問,并且可以重復使用特殊協議方法如下:__set__()、__get__()、__delete__()classNonNegative:   def__init__(self,default=0):       self.default=default   def__set__(self,instance,val):       ifval>=0:           self.default=val       else:           print("The value must be positive")   def__get__(self,instance,owner):       returnself.default      def__delete__(self,instance):         passclassMovie:    rating=NonNegative()    price=NonNegative()   def__init__(self):       passif__name__ =='__main__':    m=Movie()   print(m.rating)    m.price=10   print(m.price)    m.price=-5   print(m.price)分類:數據描述符(實現所有特殊協議方法)、非數據描述符(實現部分特殊協議方法)注:所有的類成員函數都是非數據描述符同名的數據的實例屬性和非數據描述符(方法為例)訪問的優先級,同名實例屬性會掩蓋或者隱藏方法__call__()讓類的實例可以像函數一樣調用
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂平县| 利川市| 白河县| 含山县| 襄汾县| 彩票| 南部县| 仙游县| 罗城| 鄱阳县| 清镇市| 宜良县| 怀安县| 朝阳县| 平顺县| 洪洞县| 辽阳县| 台中市| 商河县| 城固县| 怀化市| 黑龙江省| 天等县| 砀山县| 濮阳市| 平利县| 尼勒克县| 祁阳县| 福清市| 广宁县| 丹棱县| 连平县| 湖南省| 福安市| 阳信县| 乾安县| 黔江区| 西乌| 吉林省| 漳州市| 天门市|