python的反射函数(hasattr()、getattr()、setattr()与delattr())和类的内置属性attr(__getattr()__、__setattr()__与__delattr()__)
主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省),有四个可以实现自省函数。
hasattr(object,name) 判断object中是否有name字符串对应的属性或方法,返回True或False
getattr(object,name[,defaultreturn])获取object中name字符串对应属性的值,没有这个属性的话会报错,defaultreturn表示如果没有对应的属性返回默认的设定值而不会报错
setattr(object,key,value)表示修改object中key对应的属性的值为value,object中存在key属性则修改它的值,不存在则增加这个属性。
delattr(object,key) 删除object中key对应的属性
class cat:
living='earth'
def __init__(self,name,leg,tail):
self.name = name
self.leg = leg
self.tail = tail
def eat(self,food):
print('%s likes to eat %s'%(self.name,food))
cat1=cat('cat1',4,1)
print(hasattr(cat1,'leg'),hasattr(cat1,'eat_food'))
print(getattr(cat1,'tail'),getattr(cat,'eat_food','none searching attribute'))
setattr(cat1,'leg',3)
setattr(cat1,'func',lambda x:x+3)
print(cat1.__dict__)
delattr(cat1,'func')
print(cat1.__dict__) # 输出如下:
# True False
# 1 none searching attribute
# {'name': 'cat1', 'leg': 3, 'tail': 1, 'func': <function <lambda> at 0x0000029D0341A6A8>}
# {'name': 'cat1', 'leg': 3, 'tail': 1}
类的内置属性__getattr()__、__setattr()__与__delattr()__
获取的属性不存在时,会触发类的内置__getattr()__方法(获取属性时,属性存在会触发__getattribute()__方法,不存在则__getattribute()__抛出AttributeError异常,并触发__getattr()__方法)
给实例或者类增加或修改属性时、或者执行delattr(),会触发类的内置__setattr()__方法
删除属性、或者执行delattr()时,会触发类的内置__delattr()__方法
内置属性__getitem()__、__setitem()__与__delitem()__,意义与上面的attr类似
不同之处在于,通过实例.属性时触发的是attr,通过实例[属性]时触发的是item
isinstance(obj,cls) 判断obj是否是cls的对象,如果B是A的子类,C是B的实例,那么c也是A的对象
issubclass(sub,super)判断sub是否是super的子类,如果B是A的子类,C是B的子类,那么C也是A的子类
python的反射函数(hasattr()、getattr()、setattr()与delattr())和类的内置属性attr(__getattr()__、__setattr()__与__delattr()__)的更多相关文章
- 反射(hasattr和setattr和delattr)
反射(hasattr和setattr和delattr) 一.反射在类中的使用 反射就是通过字符串来操作类或者对象的属性, 反射本质就是在使用内置函数,其中反射有以下四个内置函数: hasattr:通过 ...
- 反射之hasattr() getattr() setattr() 函数
Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断object中有没有一个name字符串对应的方法或属性,返回B ...
- python中hasattr, getattr,setattr及delattr四个方法
通过一个实例来说明,这四个函数的用法: 首先一个如下的一个简单的类: class Animal(object): def __init__(self,name, zone): self.name = ...
- python动态函数hasattr,getattr,setattr,delattr
hasattr(object,name) hasattr用来判断对象中是否有name属性或者name方法,如果有,染回true,否则返回false class attr(): def fun( ...
- Python标准库:内置函数hasattr() getattr() setattr() 函数使用方法详解
hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False.参数object是一个对象 ...
- python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)
今日临时总结的内容,可能还有些不正确的地方,初步当做个速查表吧. 类的内置函数(继承object的,自己重写) 内置函数 执行时机 注意点 调用案例 __init__ 实例化对象时 不允许写返回值(r ...
- python全栈开发day23-面向对象高级:反射(getattr、hasattr、setattr、delattr)、__call__、__len__、__str__、__repr__、__hash__、__eq__、isinstance、issubclass
一.今日内容总结 1.反射 使用字符串数据类型的变量名来操作一个变量的值. #使用反射获取某个命名空间中的值, #需要 #有一个变量指向这个命名空间 #字符串数据类型的名字 #再使用getattr获取 ...
- python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,del 用法,以及元类
isinstance 是 python中的内置函数 , isinstance()用来判断一个函数是不是一个类型 issubclass 是python 中的内置函数, 用来一个类A是不是另外一个 ...
- 【转】Python的hasattr() getattr() setattr() 函数使用方法详解
Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值 ...
随机推荐
- Python 正在表达式
什么是正则表达式 正则表达式:是一组特殊的字符序列,又称为规则表达式,它能方便你检查一个字符串是否与某种模式匹配.通常用来检索和替换那些符合某些模式的文本.python中的re模块,实现了全部的正则表 ...
- git cherry-pick 报错is a merge but no -m option was given
gerrit上提示代码冲突的时候,我们首先会想到rebase下,不行的话就只能解决冲突了,最简单的做法是我的另一篇博客https://www.cnblogs.com/zndxall/p/9140813 ...
- Node.js进击基础一(http)
URL:统一资源定位符,偏重定位,是URI的子集,例如网址.URL一定是URI,但URI 不一定是URL.规则:只能用英文阿拉伯数字某些符号等,如果有文字就必须编码. URI:统一资源标识符,偏重标识 ...
- js监听页面放大缩小
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>d ...
- C# 指定http请求使用Tls1.2
转载于 https://blog.csdn.net/yanghaitian/article/details/77498872 客户端语言 版本 类库 是否支持 兼容方案 Java 1.6.115之 ...
- 从零开始一起学习SLAM | C++新特性要不要学?
LAM,C++编程是必备技能.不过,大家在学校里学习的书本一般比较老,主要还是C++98那些老一套. 本文所谓的C++新特性是指C++11及其以后的C++14.C++17增加的新关键字和新语法特性.其 ...
- 有关于异常捕获点滴,plus我也揭揭java的短
▄︻┻┳═一『异常捕获系列』Agenda: ▄︻┻┳═一有关于异常捕获点滴,plus我也揭揭java的短 ▄︻┻┳═一根据异常自定义处理逻辑([附]java异常处理规范) ▄︻┻┳═一利用自定义异常来 ...
- spring之文件上传
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- sqli-labs(十八)
第五十五关:和上一关类似,只是拼凑的方法不一样,所以需要先判断后台是怎么拼凑的 分别输入id=1'--+ id=1"--+ id=') --+ ...
- 了解MQ
一.了解RocketMQ? rocketMQ是阿里开源的一款十分优秀的消息队列,rocketMQ具有很多其他消息队列不具有的特性,更重要的是rocketMQ是用java开发的学习成本较低,并且经历了双 ...