描述器描述器定義
:物件中定義了__get__()
、__set__()
、__delete__()
方法中的任意乙個,這個物件就是乙個描述器
描述器作用
:描述器功能強大,應用廣泛,它可以控制我們訪問屬性、方法的行為,是@property、super、靜態方法、類方法、甚至屬性、例項背後的實現機制,是一種比較底層的設計
描述器官方文件
:
# __get__() 、__set__() 、 __delete__()方法
class
filed()
:def
__get__
(self,instance,owner)
:print
("訪問屬性的時候被觸發"
)print
(instance)
# instance是屬性訪問的例項
print
(owner)
# owner始終是屬主
print
(self.value)
return self.value
def__set__
(self,instance,value)
:print
("設定set方法被觸發"
) self.value = value
def__delete__
(self,instance)
:print
("刪除屬性的時候被觸發"
) self.value =
none
classa:
name = filed(
)a = a(
)a.name =
'lili'
a.name
del a.name
>
設定set方法被觸發
訪問屬性的時候被觸發
<__main__.a object at 0x7fb3076ba0a0
>
<
class
'__main__.a'
>
lili
刪除屬性的時候被觸發
# 描述器
import os
class
directorysize
:def
__get__
(self, obj, objtype=
none):
return
len(os.listdir(obj.dirname)
)class
directory
: size = directorysize(
)# descriptor instance
def__init__
(self, dirname)
: self.dirname = dirname # regular instance attribute
·a = directory(r'/users/whtest/desktop/hrunner/hrundemo'
)print
(a.size)
b = directory(r'/users/whtest/desktop/hrunner'
)print
(b.size)
orm
orm把資料庫對映成物件
資料庫的表(table) --> 類(class)
記錄(record,行資料)--> 物件(object)
字段(field)--> 物件的屬性(attribute)
參考文件
描述器實現orm描述class
filed()
:def
__init__
(self, length)
: self.max_length = length
def__get__
(self,instance,owner)
:return self.value
def__set__
(self,instance,value):if
isinstance
(value,
str):if
len(value)
<= self.max_length:
self.value = value
else
:raise valueerror(
'字串長度不超過{}字元'
.format
(self.max_length)
)else
:raise typeerror(
'請輸入字串型別'
)def
__delete__
(self,instance)
: self.value =
none
classa:
name = filed(10)
a = a(
)a.name =
'lililililil'
>
valueerror: 字串長度不超過10字元
python描述器 python描述器
首先介紹一下裝飾器,所謂裝飾器,就是接受乙個函式作為引數,然後返回乙個函式的函式。所謂帶引數的裝飾器呢?其實是返回裝飾器的函式。注意啦!python的裝飾器語法是乙個語法糖,實際上並不強制要求你的裝飾器返回函式!你的裝飾器完全返回隨便什麼東西!int float bool str等基本型別,list...
Python高階 描述符
什麼是描述符 如果乙個類實現了 get set delete 中的任意一種方法的類,用這個類建立的物件叫做描述符物件 描述符物件賦值給另乙個類的類屬性,那麼這個類就是描述符 描述符分為兩種 1.資料描述符 同時定義了 get 和 set 方法的描述符稱為資料描述符 2.非資料描述符 只定義了 get...
Python高階迭代器和裝飾器
python高階迭代器和裝飾器 一 迭代器 迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的對 象。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結 束。迭代器只能往前不會後退。1 可迭代物件 一類是集合資料型別,如 list tuple dict set str 等 一...