1. 程式人生 > >python描述符

python描述符

cal odin 固定 let 訪問 類名 self attr fault

-- coding=utf-8 --

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,‘屬性名‘,值) 設置屬性值

getattr(obj_name,‘屬性名‘) 取屬性值屬性包裝:
將方法包裝成屬性,以隱藏相關實現:
控制屬性的類型或範圍
虛擬屬性(由其他屬性處理後得來)
三種屬性操作:
可讀:@property
br/>屬性包裝:
將方法包裝成屬性,以隱藏相關實現:
控制屬性的類型或範圍
虛擬屬性(由其他屬性處理後得來)
三種屬性操作:
可讀:@property
可刪:@<property-name>.deleter

if name == "main": 是說可以單獨使用這個腳本,這個腳本也可以被

引用

描述符:
將實現特殊協議方法的類作為另一個類的類屬性
用來攔截和控制屬性訪問並可以重復使用
協議方法
get()
set()
delete()
分類
數據描述符(實現全部協議方法)
非數據描述符(實現部分協議方法)
說明:所有類成員函數都是非數據描述符
同名的實例屬性和非數據描述符(以方法為例)訪問優先級
註意:只能在新式類中使用
call()讓類的實例如函數一樣可調用

python描述符