attr系列

#__setattr__  赋值方法,即一旦遇到self.name=name,就会执行__setattr__方法#__delattr__  删除方法,一旦遇到del self.name,就会执行__delattr__方法#__getattr__  查询方法,一旦遇到res=self.name,取res的值,且self.name不存在时,#就会执行__getattr__方法.它与__setattr__和__delattr__不同.#attr系列与property的区别,#1.attr系列是定义在类中的函数,property是给定义在类中的函数做装饰器用#2.attr系列可以是对象的任何属性,但是property只能是被它装饰的函数#3.表现形式不一样,attr系列是__setattr__,__delattr__,__getattr__#property是,以sex()函数为例,@sex.setter,@sex.deleter,@property

#attr系列的使用:#__setattr__(self,key,value) 在其定义的函数中赋值使用self__dict[key]=value#__delattr__(self,item)在其定义的函数中删除使用del self__dict[key]#__getattr__(self,item)在其定义的函数中查询,一般使用getattr(self,item)#注:这里的方法是指会自动传值的函数

class Foo:    def __init__(self,name): #2        self.name =name  #即给self.name进行赋值,就会自动执行__setattr__方法

def __setattr__(self, key, value):#3        if not isinstance(value,str):#判断value的类型是否是str型            raise TypeError(‘must be str‘)#主动抛出异常,整个程序结束        print(‘----setattr---key:%s,value:%s‘%(key,value))        print(type(key))        # self.key(属性) = value #相当于setattr(self,key(字符串),vlaue)        # setattr(self,key,value)相当于给self.key(属性)进行赋值,就会自动执行        #__setattr__方法,所以进入一个死递归,即不能用该方法进行赋值.        self.__dict__[key] =value#直接在self.__dict__字典中进行赋值

def __delattr__(self, item): #12        print(‘delattr:%s‘ %item)        print(type(item))        # delattr(self,item) #相当于del self.item(属性)        # del self.item        self.__dict__.pop(item)#相当于del self.__dict__[item]

f1 =Foo(‘egon‘)#类的实例化,会自动执行__init__方法(如果有),运行__init__中的代码#1

f1.age = ‘18‘print(f1.__dict__)#f1的名称空间以字典的形式储存的del f1.age #删除f1.age,就会执行__delattr__方法(如果有),运行__delattr__中的#11print(f1.__dict__)"""class Foo:    def __init__(self,x):        self.name =x    #属性不存在的情况下才会触发    def __getattr__(self, item):        print(‘getattr--->%s  %s‘%(item,type(item)))

f =Foo(‘egon‘)#print(f.name)print(f.xxxx)

"""
时间: 2024-10-12 12:28:30

attr系列的相关文章

Python概念-Attr系列(林海峰教的)

这个Attr系列是egon老师自创的,个人还是可以接受这种文化底蕴的,所以直接拿来用,也是毫无违和感的 所谓Attr系列,其实是__setattr__,__delattr__,__getattr__ 三个函数,从名字中可以看出来这是一套设置,删除,查询的函数,那我们来一个一个的看: __setattr__(self):当对类中的某个属性进行"赋值"时触发的函数 代码示例: 1 class Teacher: 2 def __init__(self): 3 self.name = &quo

python反射及其attr系列案例

1 class People: 2 """ 3 hasattr,setattr,getattr,delattr原理:所有的对象或者类如果有设定相应的key,value,那么在对应的__dict__ 4 这个返回值中都有key,value存在的, 5 6 """ 7 def __init__(self,name): 8 self.name = name 9 def walk(self): 10 print('%s 瞧,\'piter\' 正在奔跑'

item系列

#__setitem__赋值方法,在进行obj[name]=value时,会触发执行该方法#__delitem__删除方法,在进行del obj[name],就会触发执行该方法#__getitem__查询方法,在进行读取obj[name]的值时,就会触发执行该方法#把对象操作属性模拟成字典的格式#item系列与attr系列都是方法,都是在定义阶段,而反射是内置函数,是在使用阶段#item系列是在对象进行字典形式的操作时,在会执行相应方法,而attr系列是不同的,class Foo: def __

哗啦啦Python之路 - Day 6 - 三种基础排序,递归,反射,模块

1. 三种排序方式 - 冒泡排序:两两比较,大的排右边,每次冒出去一个泡 m = [1,2,6,5,4] for i in range(len(m)): for j in range(i): if m[j] > m[j+1]: m[j],m[j+1] = m[j+1],m[j] print(m) - 选择排序 对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换:然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与K2对换.

第 13 章 CSS 选择器[上]

学习要点: 1.选择器总汇 2.基本选择器 3.复合选择器 4.伪元素选择器 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS 选择器,通过选择器定位到想要设置样式的元素.目前 CSS 选择器的版本已经升级至第三代,即 CSS3 选择器.CSS3 选择器提供了更多.更丰富的选择器方式,主要分为三大类. 一.选择器总汇 本节课主要涉及到三种选择器:基本选择器.复合选择器和伪元素选择器,具体如下: 选择器 名称 说明 CSS 版本 * 通用选择器 选择所有元素 2 <type> 元素选择器

DSB

Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与寄存器,内核态与用户态及如何切换 存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池 磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU 磁带 设备驱动与控制器 总线与南桥和北桥 操作系统的启动流程 应用程序的启动流程 day02 作业要求一:整理操作系统博客 为何

python 作业

Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与寄存器,内核态与用户态及如何切换 存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池 磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU 磁带 设备驱动与控制器 总线与南桥和北桥 操作系统的启动流程 应用程序的启动流程 day02 作业要求一:整理操作系统博客 为何

Python概念-上下文管理协议中的__enter__和__exit__

所谓上下文管理协议,就是咱们打开文件时常用的一种方法:with __enter__(self):当with开始运行的时候触发此方法的运行 __exit__(self, exc_type, exc_val, exc_tb):当with运行结束之后触发此方法的运行 exc_type如果抛出异常,这里获取异常的类型 exc_val如果抛出异常,这里显示异常内容 exc_tb如果抛出异常,这里显示所在位置 代码示例:(以自己定义的Open类型做示例) 1 # 编辑者:闫龙 2 class Open: 3

python第八章

一.面向对象补充 特殊的类属性: 对于任何类C,显示如下: C.__name__           类C的名字(string) C.__doc__             类C的文档字符串 C.__bases__          类C的所有父类构成元素(包含了以个由所有父类组成的元组) C.__dict__             类C的属性(包含一个字典,由类的数据属性组成) C.__module__        类C定义所在的模块(类C的全名是'__main__.C',如果C位于一个导