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模型的简单介绍...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日媒:后锂离子电池时代竞争 中国碾压式领
- 下一篇: python加密解密库openssl_O