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值 ...
随机推荐
- npm下载指定版本的插件
eg:下载boostrap版本为3.3.7 npm install --save-dev bootstrap@3.3.7 备注:--save则将依赖的组件添加到package.json文件下 --sa ...
- webpack1.0--图片
- 前端基础进阶(五):全方位解读this
https://segmentfault.com/a/1190000012646488 https://yangbo5207.github.io/wutongluo/ 说明:此处只是记录阅读前端基础 ...
- iOS 新浪微博-4.0 OAuth授权
申请开发者 想要拉到到新浪微博的数据,首先让自己成为开发者.申请成为开发者账号很简单,只要有新浪微博的账号即可. 申请地址:http://open.weibo.com/ 在开发的过程中,我们需要拿到几 ...
- 好吧,我承认我是爱瞎折腾----利用YDUI改变页面UI
上周恒丰代付接口上线投产后,我做了一个“恒丰代付检查工具”,用途是,当线上调用恒丰代付出现了问题订单时,可以在这个工具页里做相应的弥补. 我项目里其他一些工具页的UI用的是YDUI.YDUI号称是“一 ...
- c#基础思维导图
- DateTime.Compare(t1,t2)比较两个日期大小
DateTime.Compare(t1,t2)比较两个日期大小,排前面的小,排在后面的大,比如:2011-2-1就小于2012-3-2返回值小于零: t1 小于 t2. 返回值等于零 : t1 等于 ...
- install scala & spark env
安装Scala 1,到http://www.scala-lang.org/download/ 下载与Spark版本对应的Scala.Spark1.2对应于Scala2.10的版本.这里下载scala- ...
- c#如何判断字符串是否含中文
如代码: static bool ContainChinese(string input) { string pattern = "[\u4e00-\u9fbb]"; return ...
- Java操作队列
Java操作队列 常见的几种模式: 1 简单队列simple 模型:(p + 队列 + c) P:生产者producer,将消息发送到队列 红色:消息队列 C:消费者consumer,从队列消费消 ...