python模型的属性是什么_Python的自定义属性访问跟描述器以及ORM模型的简单介绍...
一 、 自定義屬性訪問
1.__getattr__
作用:當我們訪問屬性的時候,如果屬性不存在(出現(xiàn)AttrError),該方法會被觸發(fā)。
2.__getattribute__
作用:訪問屬性的時候,第一時間觸發(fā)該方法去找屬性。如果沒找到觸發(fā)AttrError
總結(jié):當我們?nèi)ピL問一個不存在的屬性時,首先會觸發(fā)__getattribute__,然后才會觸發(fā)__getattr__
如果屬性存在,就返回這個屬性值,如果沒有就報AttrError
3. __setattr__(self,key,value)
作用:這個屬性在給對象設(shè)置屬性的時候觸發(fā)
例子:
def __setattr__(self,key,value):
if key == "age" :
super().__setattr__(key,18)
else:
print("設(shè)置屬性的時候會觸發(fā)")
super().__setattr__(key,value)
4. __delattr__(self,item):
print("刪除的時候被觸發(fā)")
super().__delattr__(item)
item : 被刪除的類屬性名
作用:如果我們不想一個屬性被刪除,就重寫__delattr__方法,如果調(diào)用父類的方法就會被刪除
二、描述器
描述器是一個具有"綁定行為"的對象屬性,該對象的屬性訪問通過描述器協(xié)議覆蓋:__get__()
__set__()和__delete__().如果一個對象定義這些方法中的任何一個,它被稱為一個描述器。
1.object.__get__(self,instance,owner)
獲取主類的屬性或者該類的一個實例的屬性。owner始終是屬主,instance是屬性訪問的實例
當屬性通過owner訪問時則為None。這個方法該返回的屬性值,或者引發(fā)一個AttributeError
異常
2.object.__set__(self,instance,value)
設(shè)置屬主類的實例instance的屬性為一個新值value
3.object.__delete__(self,instance)
刪除屬主類的實例insta的屬性
例子:
class Filed(object):
def __get__(self,instance,owner)
print("訪問屬性的時候被觸發(fā)")
return self.value
def object.__set__(self,instance,value)
print("set方法被觸發(fā)")
self.value = value
def object.__delete__(self,instance)
print("刪除屬性的時候被觸發(fā)")
self.value = None
class Model(object):
name = '熊貓'
attr = Filed() # 描述器對象:會覆蓋類屬性的相關(guān)操作
三、orm模型介紹
o objects:類和對象
R Relation:關(guān)系,關(guān)系數(shù)據(jù)庫中的表格
M Mapping:映射
orm框架的功能
1.建立模型類和表之間的對應(yīng)關(guān)系,允許我們通過面向?qū)ο蟮姆绞絹聿僮鲾?shù)據(jù)庫。
2.根據(jù)設(shè)計的模型類生成數(shù)據(jù)庫中的表格
3.通過方便的配置就可以進行數(shù)據(jù)庫的切換
例子:描述器在orm模型中的應(yīng)用
# 通過描述器實現(xiàn)一個布爾類型的字段類型。
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)
數(shù)據(jù)庫的字段類型
mysql常用數(shù)據(jù)類型:
整數(shù):int,bit
小數(shù):deccimal (decimal表示浮點數(shù),如decimal(5,2)表示共存五位數(shù),小數(shù)占2位)
字符串:varchar,char (char不可變長度,varchar可變長度 )
日期時間:date,time,datetime
枚舉類型:(enum)
總結(jié)
以上是生活随笔為你收集整理的python模型的属性是什么_Python的自定义属性访问跟描述器以及ORM模型的简单介绍...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日媒:后锂离子电池时代竞争 中国碾压式领
- 下一篇: 5.75亿超《你的名字》!《铃芽之旅》成