python描述符
class NonNeg:
def init(self,default=0):
self.default = default
pass
def get(self,instance,owner):
return self.default
def __set__(self,instance,val): if val > 0: self.default = val pass else: print(‘The value must be NonNegative!‘) pass def __delete__(self,instance): pass pass
class Movie:
rating = NonNeg()
score = NonNeg()
pass
if name == ‘main‘:
m = Movie()
print(‘rating:‘,m.rating)
print(‘score:‘,m.score)
m.rating = 80
print(‘rating:‘,m.rating)
m.score = -3
print(‘score:‘,m.score)
字典追加數據:
字典[‘key‘] = ‘value‘
類的方法定義:
def 方法名(self,參數)
類方法多的調用:
在類內部調用:self.方法名()
在類外部調用:對象名.方法名()
構造方法的作用就是類實例化時初始化實例
init()方法就是類實例化的第二部自動調用的函數
註意其方法名是固定的,但參數也同普通方法一樣,至少應帶有self參數
初始化實例包括:定義和初始化實例屬性:或調用類的一些方法
構造方法可以帶有除self外的其他各種參數,可以達到在實例化類時,為相應的屬性傳
入指定的值
同名的類屬性與實例屬性相同時:
以實例名.屬性名引用時,優先引用實例屬性
以類名.屬性名引用時,只能引用類屬性
屬性訪問的特殊方法(反射):
主要工具函數:
hasattr(obj_bame,‘屬性名‘) 判斷當前對象中有沒有固定屬
性
setattr(obj_name,‘屬性名‘,值) 設置屬性值
將方法包裝成屬性,以隱藏相關實現:
控制屬性的類型或範圍
虛擬屬性(由其他屬性處理後得來)
三種屬性操作:
可讀:@property
br/>屬性包裝:
將方法包裝成屬性,以隱藏相關實現:
控制屬性的類型或範圍
虛擬屬性(由其他屬性處理後得來)
三種屬性操作:
可讀:@property
可刪:@<property-name>.deleter
if name == "main": 是說可以單獨使用這個腳本,這個腳本也可以被
引用
描述符:
將實現特殊協議方法的類作為另一個類的類屬性
用來攔截和控制屬性訪問並可以重復使用
協議方法
get()
set()
delete()
分類
數據描述符(實現全部協議方法)
非數據描述符(實現部分協議方法)
說明:所有類成員函數都是非數據描述符
同名的實例屬性和非數據描述符(以方法為例)訪問優先級
註意:只能在新式類中使用
call()讓類的實例如函數一樣可調用
python描述符