国产探花免费观看_亚洲丰满少妇自慰呻吟_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__()讓類的實例可以像函數一樣調用
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄平县| 读书| 华蓥市| 通化县| 监利县| 张家港市| 威海市| 桂阳县| 尚义县| 富锦市| 沾化县| 从江县| 桃园市| 疏附县| 汽车| 基隆市| 无极县| 海兴县| 怀安县| 本溪| 安义县| 富蕴县| 南和县| 石城县| 鱼台县| 蒙山县| 正阳县| 买车| 玉屏| 保德县| 伊通| 乌拉特前旗| 桃江县| 陆丰市| 烟台市| 中阳县| 武冈市| 霸州市| 磐石市| 莱州市| 郯城县|