python高階 描述器和ORM模型

2021-10-12 06:31:11 字數 2707 閱讀 4128

描述器描述器定義:物件中定義了__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 等 一...