python自省函数的总结(源码剖析)

#内建函数:getattr()、setattr()、delattr()、hasattr()
#getattr(object,name)确实和object.name是一样的功能,只不过这里可以把name作为一个变量去处理
import statsout
#一个模块支持多种不同格式的打印,根据传入的formate参数的不同,调用不同的函数实现几种格式的输出
def outPut(data,format="text"):
	outputFunc=getattr(statsout,"output%s"%format)#可以根据传入output函数的format参数的不同 去调用statsout模块不同的方法(用格式化字符串实现output%s)
	return <span style="font-family: Arial, Helvetica, sans-serif;">outputFunc</span><span style="font-family: Arial, Helvetica, sans-serif;">(data)#返回的是这个方法的对象 就可以直接使用了 如果要添加新的格式 只需要在模块中写入新的方法函数</span>
	#在调用output函数时使用新的参数就可以使用不同的格式输出




#获取对象引用getattr  Getattr用于返回一个对象属性,或者方法
class rocket:
	def __init__(self):
		self.name="zhouruifu"
		self.age=23
	def method(self):
		print "method print...."
roc=rocket()
print roc.name,roc.age
roc.method()
#上下两种效果等同
print getattr(roc,"name","This property does not exist...")#如果roc对象中有属性name则打印self.name的值,否则打印 This property does not exist
print getattr(roc,"name111","This property does not exist...")
print getattr(roc,'age',"This property does not exist...")
print getattr(roc,'age222',"This property does not exist...")
print getattr(roc,"method","This property does not exist...")
print getattr(roc,"method333","This property does not exist...")
getattr(roc,"method",'default...')()#如果有方法method,运行函数并打印None   否则打印default



#setattr()
class rocket:
	def __init__(self,name):
		self.name=name
roc=rocket("zhouruifu")
setattr(roc,"zhouruifu",23)#等价于  roc.zhouruifu=23
print roc.name
print roc.zhouruifu


print hasattr(roc,"name")#存在此属性  输出True

#delattr()  参数是由一个对象(记住python中一切皆是对象)和一个字符串组成的。string参数必须是对象属性名之一。该函数删除该obj的一个由string指定的属性
delattr(roc,"name") #等价于del roc.name


#hasattr()  用于确定一个对象是否具有某个属性
print hasattr(roc,"name")#对象属性被删除后输出False


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值