__getattr__ __delattr__ __setattr__ __getattribute__使用(重写python提供的错误信息)
自己定义了这些attr 查找删除设置就会触发自己定义的逻辑,如果不重新,pyton会提供自己报错信息class Room:
def __init__(self,name):
self.name = name def big_room(self):
print('bigroot') def __getattr__(self, item):
print('调用一个不存的对象属性时候,执行',item) def __delattr__(self, item):
print('删除一个属性时候,执行',item) def __setattr__(self, key, value):
print('设置一个属性操作的时候,执行')
self.__dict__[key] = value
print(key,value)
#self.key = value #这些写会报错递归 RecursionError: maximum recursion depth exceeded 因为这个也是在设置一个属性,当设置这个属性的时候,也会触发__setattr__,这样就会一直循环,最后报错,所有使用self.__dict__[key] = value操作
def __getattribute__(self, item):
print('只要运行,我就执行',item) #只要执行调用,我就执行
R = Room('回电话') #设置一个属性操作的时候,执行__setattr__; __init__中的self.name 传递给key name 传递给value
R.ddddddd #调用这个对象属性不存在,就执行__getattr__ 属性,不要加括号 ddddddd 这个参数会传递给item
del R.yiii #删除的时候会触发__delattr__ 不管删除的这个属性是否存在 都触发 yiii 这个参数会传递给item
print(R.__dict__)
Room.txt = 2 #无法触发__setattr__
执行结果:
设置一个属性操作的时候,执行
name 回电话
调用一个不存的对象属性时候,执行 ddddddd
删除一个属性时候,执行 yiii
{'name': '回电话'}
注意: __getattr__ __delattr__ __setattr__ 触发条件是实例化后才能触发
__getattr__ __delattr__ __setattr__ __getattribute__使用(重写python提供的错误信息)的更多相关文章
- Python调试打印错误信息
try: ..... except Exception, e: print 'repr(e):\t', repr(e)
- 一文教你读懂Python中的异常信息
正文共:11813 字 2 图 预计阅读时间: 30 分钟 原文:https://realpython.com/python-traceback/ 译者:陈祥安 原文有所改动. 在写 Python 代 ...
- python魔法方法:__getattr__,__setattr__,__getattribute__
python魔法方法:__getattr__,__setattr__,__getattribute__ 难得有时间看看书....静下心来好好的看了看Python..其实他真的没有自己最开始想的那么简单 ...
- python __setattr__, __getattr__, __delattr__, __call__
python __setattr__, __getattr__, __delattr__, __call__ getattr `getattr`函数属于内建函数,可以通过函数名称获取 value = ...
- python类内部方法__setattr__ __getattr_ __delattr__ hasattr __getattribute__ __getitem__(),__setitem__(), __delitem__()
主要讲类的内部方法 __setattr__ __getattr_ __delattr__ hasattr __getattribute__ __getitem__(),__setitem__ ...
- 第8.30节 重写Python __setattr__方法实现属性修改捕获
一. 引言 在<第8.26节 重写Python类中的__getattribute__方法实现实例属性访问捕获>章节介绍了__getattribute__方法,可以通过重写该方法,截获所有通 ...
- 类的专有方法(__getattr__和__setattr__、__delattr__)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #http://www.360doc.com/content/15/0413/19/12067640_4629 ...
- 面向对象 反射 和item系列和内置函数和__getattr__和__setattr__
反射 反射主要用在网络编程中, python面向对象的反射:通过字符串的形式操作对象相关的属性.python的一切事物都是对象. 反射就是通过字符串的形式,导入模块:通过字符串的形式,去模块寻找指定函 ...
- [Python3 填坑] 016 对 __getattr__ 和 __setattr__ 举例
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 __getattr__ 2.2 __setattr__ 1. print( 坑的信息 ) 挖坑时间:2019/04/07 明细 坑的编码 ...
随机推荐
- PyCharm基本用法
1.修改字体 在file->settings下进行修改如下图: 2 修改颜色背景 在file->settings下修改,如图: 3连接git 点击file->settings,选择版 ...
- FCC JS基础算法题(10):Falsy Bouncer(过滤数组假值)
题目描述: 删除数组中的所有假值.在JavaScript中,假值有false.null.0."".undefined 和 NaN. 使用filter方法,过滤掉生成的 Boolea ...
- xpath提取到的中文乱码时的解决办法
βҳ转换为正常的中文:
- python day21 ——面向对像-反射 getattr,内置方法
一.反射:用字符串数据类型的变量名来访问这个变量的值 上代码^_^ # class Student: # ROLE = 'STUDENT' # @classmethod # def check_cou ...
- nf_conntrack
How to Fix Nf_conntrack Table Full Dropping Packet Linux CentOS PacketLoss 2 minutes to read (234 w ...
- IOS Block代码块的定义与使用
代码块的本质是和其他的变量类似,不同的是,代码块存储的数据是一个函数体.使用代码块,你可以像调用其他标准函数一样的调用,可以传入参数,并得到返回值. 脱字符是代码块的语法标记.下图表示代码块的 ...
- tomcat升级 遇到的坑
今天说说tomcat升级后出的问题 以前的版本是8.0.30的 因用安全漏洞 需要升级tomcat 为8.5.28的版本 升级后jvm的配置 等等都和一起一样,过了几天发现,我们的错误日志和处理影响转 ...
- 第k大元素
在数组中找到第k大的元素 样例 给出数组[9,3,2,4,8],第三大的元素是4 给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推 注意 你可以交换数组 ...
- javax/servlet/jsp/jstl/core/Config
javax/servlet/jsp/jstl/core/Config springmvc出现的问题. 尝试了各种jar,问题依旧. DispatcherServlet配置如下. <bean id ...
- Xcode 和 VisualC++输出流的差别的理解
将这样一段程序分别运行与Visual Studio 和 Xcode上边的结果: #include <iostream> using namespace std; int main() { ...