日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python模型的属性是什么_Python的自定义属性访问跟描述器以及ORM模型的简单介绍...

發布時間:2023/12/19 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python模型的属性是什么_Python的自定义属性访问跟描述器以及ORM模型的简单介绍... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 、 自定義屬性訪問

1.__getattr__

作用:當我們訪問屬性的時候,如果屬性不存在(出現AttrError),該方法會被觸發。

2.__getattribute__

作用:訪問屬性的時候,第一時間觸發該方法去找屬性。如果沒找到觸發AttrError

總結:當我們去訪問一個不存在的屬性時,首先會觸發__getattribute__,然后才會觸發__getattr__

如果屬性存在,就返回這個屬性值,如果沒有就報AttrError

3. __setattr__(self,key,value)

作用:這個屬性在給對象設置屬性的時候觸發

例子:

def __setattr__(self,key,value):

if key == "age" :

super().__setattr__(key,18)

else:

print("設置屬性的時候會觸發")

super().__setattr__(key,value)

4. __delattr__(self,item):

print("刪除的時候被觸發")

super().__delattr__(item)

item : 被刪除的類屬性名

作用:如果我們不想一個屬性被刪除,就重寫__delattr__方法,如果調用父類的方法就會被刪除

二、描述器

描述器是一個具有"綁定行為"的對象屬性,該對象的屬性訪問通過描述器協議覆蓋:__get__()

__set__()和__delete__().如果一個對象定義這些方法中的任何一個,它被稱為一個描述器。

1.object.__get__(self,instance,owner)

獲取主類的屬性或者該類的一個實例的屬性。owner始終是屬主,instance是屬性訪問的實例

當屬性通過owner訪問時則為None。這個方法該返回的屬性值,或者引發一個AttributeError

異常

2.object.__set__(self,instance,value)

設置屬主類的實例instance的屬性為一個新值value

3.object.__delete__(self,instance)

刪除屬主類的實例insta的屬性

例子:

class Filed(object):

def __get__(self,instance,owner)

print("訪問屬性的時候被觸發")

return self.value

def object.__set__(self,instance,value)

print("set方法被觸發")

self.value = value

def object.__delete__(self,instance)

print("刪除屬性的時候被觸發")

self.value = None

class Model(object):

name = '熊貓'

attr = Filed() # 描述器對象:會覆蓋類屬性的相關操作

三、orm模型介紹

o objects:類和對象

R Relation:關系,關系數據庫中的表格

M Mapping:映射

orm框架的功能

1.建立模型類和表之間的對應關系,允許我們通過面向對象的方式來操作數據庫。

2.根據設計的模型類生成數據庫中的表格

3.通過方便的配置就可以進行數據庫的切換

例子:描述器在orm模型中的應用

# 通過描述器實現一個布爾類型的字段類型。

class Description(object):

def __get__(self, instance, owner):

return self.value

def __set__(self, instance, value):

if isinstance(value, bool):

self.value = value

else:

raise TypeError("需要一個bool類型的值")

def __delattr__(self, item):

self.value = None

class Data(object):

gender = Description()

d = Data()

d.gender = False

print(d.gender)

數據庫的字段類型

mysql常用數據類型:

整數:int,bit

小數:deccimal (decimal表示浮點數,如decimal(5,2)表示共存五位數,小數占2位)

字符串:varchar,char (char不可變長度,varchar可變長度 )

日期時間:date,time,datetime

枚舉類型:(enum)

總結

以上是生活随笔為你收集整理的python模型的属性是什么_Python的自定义属性访问跟描述器以及ORM模型的简单介绍...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。