博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python自省函数getattr的用法
阅读量:5889 次
发布时间:2019-06-19

本文共 1534 字,大约阅读时间需要 5 分钟。

首先把官方文档搬出来:

img_9454e7ccbc62445ddc1934f0e9d42f50.png
doc.png

英文棒的小伙伴们最好是去看下官方文档,毕竟原汁原味的英文表述才最准确。

getattr()函数是Python自省的核心函数,可以把一个要访问的变量或方法,通过字符串的形式传递过去并拿到返回的值。

获取对象引用getattr

getattr用于返回一个对象属性,或者方法

示例代码:

class Demo:    def __init__(self):        self.name = 'allen'        self.age = '18'    def method_one(self):        print("这是 method_one 方法")        return "one"    def method_two(self):        print("这是 method_two 方法")d = Demo()# 如果d对象中有属性name则打印self.name的值,否则打印'not find'print(getattr(d, 'name', 'not found'))# 如果d对象中有属性name则打印self.age的值,否则打印'not find'print(getattr(d, 'age', 'not found'))# 如果有方法method_one,打印其地址,否则打印defaultprint(getattr(d, 'method_one', 'default'))# 如果有方法method_one,运行函数并打印返回值,否则,打印defaultprint(getattr(d, 'method_one', 'default')())# 如果有方法method,运行函数并打印None否则打印defaultprint(getattr(d, 'method_two', 'default')())

解释一下上图的示例代码:

定义一个Demo类,有两个变量nameage,还有两个方法method_onemethod_two
method_one方法打印一句话并返回one这个字符串;
method_two方法打印一句话没有任何返回值;


print(getattr(d, 'name', 'not found')):

获取d对象的name属性,如果name属性没有,返回not found。
运行结果:allen


print(getattr(d, 'age', 'not found')):

获取d对象的age属性,如果age属性没有,返回not found。
运行结果:not found


print(getattr(d, 'method_one', 'default')):

获取d对象的method_one方法的地址,如果method_one方法没有,返回default。
运行结果:<bound method Demo.method_one of <__main__.Demo object at 0x10cbcb9e8>>


print(print(getattr(d, 'method_one', 'default')()):

获取d对象的method_one方法并运行,且打印返回值。如果method_one方法没有,返回default。
运行结果:
这是 method_one 方法
one


print(getattr(d, 'method_two', 'default')()):

获取d对象的method_two方法并运行,且打印返回值。如果method_two方法没有,返回default。
运行结果:
这是 method_one 方法
None


转载地址:http://fwwsx.baihongyu.com/

你可能感兴趣的文章
WPF EventSetter Handler Command
查看>>
polya定理,环形涂色
查看>>
day4-装饰器前奏
查看>>
【Jest】笔记三:全局变量
查看>>
forward和redirect的区别
查看>>
基本数据类型
查看>>
使用JavaMail完成邮件的编写
查看>>
洛谷P1576 最小花费
查看>>
封装了一个类,可生成验证码,缩略图,及水印图
查看>>
NewSQL为何使传统关系数据库黯然失色?
查看>>
文件服务器 之 Debian下pureftpd的安装心得
查看>>
第一阶段项目总结
查看>>
Java集合详解
查看>>
myeclilpse打开文件所在位置的图标消失后的找回方法
查看>>
数据链路层
查看>>
FactoryMethod工厂方法模式(创建型模式)
查看>>
Java面向对象编程概述
查看>>
ios中NSObject分类(2)
查看>>
vi(vim)快速入门 常用指令
查看>>
我和python的初相识
查看>>