主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省),有四个可以实现自省函数。

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()__)的更多相关文章

  1. 反射(hasattr和setattr和delattr)

    反射(hasattr和setattr和delattr) 一.反射在类中的使用 反射就是通过字符串来操作类或者对象的属性, 反射本质就是在使用内置函数,其中反射有以下四个内置函数: hasattr:通过 ...

  2. 反射之hasattr() getattr() setattr() 函数

    Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断object中有没有一个name字符串对应的方法或属性,返回B ...

  3. python中hasattr, getattr,setattr及delattr四个方法

    通过一个实例来说明,这四个函数的用法: 首先一个如下的一个简单的类: class Animal(object): def __init__(self,name, zone): self.name = ...

  4. python动态函数hasattr,getattr,setattr,delattr

    hasattr(object,name) hasattr用来判断对象中是否有name属性或者name方法,如果有,染回true,否则返回false class attr():     def fun( ...

  5. Python标准库:内置函数hasattr() getattr() setattr() 函数使用方法详解

    hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False.参数object是一个对象 ...

  6. python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)

    今日临时总结的内容,可能还有些不正确的地方,初步当做个速查表吧. 类的内置函数(继承object的,自己重写) 内置函数 执行时机 注意点 调用案例 __init__ 实例化对象时 不允许写返回值(r ...

  7. python全栈开发day23-面向对象高级:反射(getattr、hasattr、setattr、delattr)、__call__、__len__、__str__、__repr__、__hash__、__eq__、isinstance、issubclass

    一.今日内容总结 1.反射 使用字符串数据类型的变量名来操作一个变量的值. #使用反射获取某个命名空间中的值, #需要 #有一个变量指向这个命名空间 #字符串数据类型的名字 #再使用getattr获取 ...

  8. python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,del 用法,以及元类

    isinstance   是 python中的内置函数 , isinstance()用来判断一个函数是不是一个类型 issubclass  是python 中的内置函数,  用来一个类A是不是另外一个 ...

  9. 【转】Python的hasattr() getattr() setattr() 函数使用方法详解

    Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值 ...

随机推荐

  1. npm下载指定版本的插件

    eg:下载boostrap版本为3.3.7 npm install --save-dev bootstrap@3.3.7 备注:--save则将依赖的组件添加到package.json文件下 --sa ...

  2. webpack1.0--图片

  3. 前端基础进阶(五):全方位解读this

    https://segmentfault.com/a/1190000012646488  https://yangbo5207.github.io/wutongluo/ 说明:此处只是记录阅读前端基础 ...

  4. iOS 新浪微博-4.0 OAuth授权

    申请开发者 想要拉到到新浪微博的数据,首先让自己成为开发者.申请成为开发者账号很简单,只要有新浪微博的账号即可. 申请地址:http://open.weibo.com/ 在开发的过程中,我们需要拿到几 ...

  5. 好吧,我承认我是爱瞎折腾----利用YDUI改变页面UI

    上周恒丰代付接口上线投产后,我做了一个“恒丰代付检查工具”,用途是,当线上调用恒丰代付出现了问题订单时,可以在这个工具页里做相应的弥补. 我项目里其他一些工具页的UI用的是YDUI.YDUI号称是“一 ...

  6. c#基础思维导图

  7. DateTime.Compare(t1,t2)比较两个日期大小

    DateTime.Compare(t1,t2)比较两个日期大小,排前面的小,排在后面的大,比如:2011-2-1就小于2012-3-2返回值小于零:  t1 小于 t2. 返回值等于零 : t1 等于 ...

  8. install scala & spark env

    安装Scala 1,到http://www.scala-lang.org/download/ 下载与Spark版本对应的Scala.Spark1.2对应于Scala2.10的版本.这里下载scala- ...

  9. c#如何判断字符串是否含中文

    如代码: static bool ContainChinese(string input) { string pattern = "[\u4e00-\u9fbb]"; return ...

  10. Java操作队列

    Java操作队列 常见的几种模式:   1 简单队列simple 模型:(p + 队列 + c) P:生产者producer,将消息发送到队列 红色:消息队列 C:消费者consumer,从队列消费消 ...