一 、 自定义属性访问

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模型的简单介绍...相关推荐

  1. python里的属性是什么_python属性 python 里的属性是什么意思?

    python 里的属性是什么意思? 刚开始看python教程,不是很明白."属性,属性方法,方法"这些是什么意你说的是对象吧 Python是面向对象的语言,在python中一切皆对 ...

  2. python的类属性和方法_Python 类的属性和方法

    本文介绍Python类中的属性和方法.和大部分语言类似,Python中的属性和方法也公有(public)和私有(private) 的区分. 一.类的公有和私有属性: 在Python中一般定义的属性为公 ...

  3. python模型的属性是什么_python – Django:为什么Django模型字段的类属性?

    不,原因与此相同: >>> class Foo(object): ... bar = 'Foo attribute' ... >>> f = Foo() >& ...

  4. python的类属性和方法_Python中类属性、实例属性和实例方法的区别

    你似乎对概念有相当好的理解.很难找到用通用方式解释的信息,尤其是像python这样一种广泛使用的语言.我基本上会附和你的正确假设,并在此过程中做一些小的调整.在 类属性是将从类共享创建的所有对象的特征 ...

  5. python的实例属性和静态属性表_Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法...

    类属性可以直接在方法中赋值,但 一.调用该属性时,必须先调用该方法: 二.与 init 方法区别是,init方法只初始化一次,初始化完成后作为全局变量.在方法中赋值属性,每次调用该方法,该属性初始化一 ...

  6. python获取方法的装饰方法_python中的方法和装饰器

    [TOC] 装饰器 python中的装饰器(decorator)是在pep 318中被首次引入,它的本质是一个函数这个函数是接受其它参数为参数,并且用一个新的,修改后的函数作为替换,最常见的装饰器就c ...

  7. python连接数据库并编写调用函数_Python使用pyodbc访问数据库操作方法详解

    本文实例讲述了Python使用pyodbc访问数据库操作方法.分享给大家供大家参考,具体如下: 1.连接数据库 1)直接连接数据库和创建一个游标(cursor) cnxn =pyodbc.connec ...

  8. python显示小数点后几位数_Python编程从入门到实践-连载1(变量和简单数据类型)...

    第二章 变量和简单数据类型 2.2.0 变量 我们添加了一个名为message的变量.每个变量都存储了一个值--与变量相关联的信息.在这里,存储的值为文本"Hello Python worl ...

  9. python密码登录程序三次_Python实现账号密码输错三次即锁定功能简单示例

    本文实例讲述了Python实现账号密码输错三次即锁定功能.分享给大家供大家参考,具体如下: 初学Python-1 #实现账号输错三次即锁定 user = "hubery" pass ...

最新文章

  1. ( KMP 求循环节的个数)Power Strings -- poj -- 2406
  2. Redhate5.4下Oracle 11g安装
  3. 快速搭建 Serverless 在线图片处理应用
  4. android 介绍0
  5. [导入]对iis写权限的利用
  6. 改造消费方解决地址硬编码问题
  7. c 导入数据到oracle,excel中数据导入到Orcale数据库表中的方法 | 学步园
  8. leetcode剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)
  9. 2018届校招面经精选
  10. Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。...
  11. 如何理解Spring中的IOC和AOP
  12. 计算机培训教学计划,计算机培训教学计划.doc
  13. android ip计算,子网掩码怎么算_ipv6子网掩码计算器_掩码计算器android
  14. 今天是愚人节。(Today is April Fools' Day.)网页需要倾斜o(∩_∩)o
  15. 如何下载视频号的视频
  16. Windows彩色桌面变成灰色,怎么办?
  17. python使用to_csv(mode=‘a‘)追加数据/(mode=‘w‘)覆盖文件数据
  18. 联想ThinkSystem服务器 安装ESXI 7.0 踩坑记录
  19. Win10将某个软件/文件添加到开始屏幕(磁贴)
  20. 开关稳压器详解(七)-Buck降压型开关稳压器RC Snubber设计

热门文章

  1. 20应用统计考研复试要点(part11)--应用多元分析
  2. java监控数据库的增量_【安德鲁斯】基于脚本的数据库quot;增量更新quot;,如果不改变,每次更新java代码、!...
  3. 0中断优先级_西门子S7-200 SMART中断及中断指令概述
  4. LeetCode53:最大子序和(分治思想,Python3实现)
  5. 看了豆瓣的差评以后,我不建议你买我的书了。
  6. 数据结构-常用的查找算法
  7. SAP Spartacus Sample Data Extension
  8. SAP Spartacus打印Occ endpoint请求的url
  9. SAP Spartacus的CMSPageGuard
  10. 本人使用abapgit遇到的一些错误