Python面向对象编程-反射
来源: 腾讯云2023-04-21 02:21:40
(资料图片)
在Python中,反射是一种动态访问和修改对象属性和方法的机制。通过反射,我们可以在运行时获取对象的属性和方法,以及修改它们的值。反射可以帮助我们编写更灵活、更通用、更易维护的代码,例如实现通用的配置文件解析、ORM框架、远程调用等。
Python中的反射主要包括以下几个函数和方法:
dir(obj):返回对象的所有属性和方法的列表。getattr(obj, name[, default]):获取对象的指定属性或方法,如果属性或方法不存在则返回默认值或引发AttributeError异常。setattr(obj, name, value):设置对象的指定属性或方法的值。delattr(obj, name):删除对象的指定属性或方法。下面是一个简单的反射示例,演示如何使用反射来访问和修改对象的属性和方法:
class MyClass: x = 1 y = 2 def foo(self): print("foo") obj = MyClass() # 使用dir函数获取对象的属性和方法列表print(dir(obj))# 使用getattr函数获取对象的属性和方法print(getattr(obj, "x")) # 输出:1print(getattr(obj, "y")) # 输出:2getattr(obj, "foo")() # 输出:foo# 使用setattr函数设置对象的属性和方法setattr(obj, "x", 10)setattr(obj, "y", 20)setattr(obj, "foo", lambda self: print("bar"))print(obj.x) # 输出:10print(obj.y) # 输出:20obj.foo() # 输出:bar# 使用delattr函数删除对象的属性和方法delattr(obj, "x")delattr(obj, "y")delattr(obj, "foo")print(dir(obj)) # 输出:[]
在上面的示例中,我们定义了一个名为MyClass的类,它有两个属性x和y和一个方法foo。然后,我们创建了一个MyClass的对象obj。
首先,我们使用dir函数获取对象的所有属性和方法,并打印输出它们的列表。
接着,我们使用getattr函数获取对象的属性和方法,使用字符串参数指定属性和方法的名称。如果属性或方法不存在,则getattr函数会引发AttributeError异常,可以使用默认值参数避免异常。我们还演示了如何调用对象的方法。
然后,我们使用setattr函数设置对象的属性和方法的值,使用字符串参数指定属性和方法的名称。如果属性或方法不存在,则setattr函数会创建一个新的属性或方法。我们还演示了如何设置对象的方法的值,并使用新的lambda表达式替换原有的方法。
最后,我们使用delattr函数删除对象的属性和方法,使用字符串参数指定属性和方法的名称。如果属性或方法不存在,则delattr函数会引发AttributeError异常。
标签:


2022-05-16
甘肃:“寒凉”持续盘踞 “甘味”农产备受考验

2022-05-16
(上海战疫录)专访上海一居民区书记:坚持!背后6000多居民等着我们

2022-05-16
西宁公安严厉打击涉疫违法犯罪 依法处理案件72起123人

2022-05-16
甘肃渭源:千年渭水文化蕴“写生热” 校地合作塑学生文化涵养

2022-05-16
5月16日起 西宁市部分区域有序开放

2022-05-16
青海西宁:设置“黄码医院”保障重点人群医疗服务需求
- 04-21Python面向对象编程-反射
- 04-21天天新消息丨高天红:基金业协会将持续深化放管服改革
- 04-21济南千佛山景区免票范围
- 04-21医健IPO解码丨主攻自免和过敏药物,布局全面的荃信生物能否从千亿赛道崛起?
- 04-21全球播报:多国客商齐聚寿光“菜博会” 搭建农业国际交流合作平台
- 04-212023佛山美的鹭湖水上乐园五一特惠门票购买入口 世界独家
- 04-20vscode缩进html格式代码的方法 资讯推荐
- 04-20又是书香季 阅见千帆起!石家庄市图书馆世界读书日活动指南来了→-焦点简讯
- 04-20极目锐评|“拆绿还耕”引发关注,该问问谁将耕地变成了绿地
- 04-20每日头条!普通本科高校陆续停招——专升本该往何处走
- 04-20环球观热点:33项人社服务事项进驻天开园
- 04-204.5%!中国一季度经济“成绩单”透露这些关键信息_世界快讯
- 04-20重庆北碚:防溺水宣传进校园,安全知识伴“童”行 天天新视野
- 04-20天天实时:今年一季度6506.5万人次出入境
- 04-20詹金斯:琼斯顶替莫兰特出任球队首发 这不会改变我们的打法
- 04-20南阳市西峡县委第五巡察组专题党课宣讲党的二十大精神
- 04-20广汽埃安拟上市,官方回应:上市板块尚未确定
- 04-20新消息丨颛桥综合执法队开展复议诉讼案例线上培训
- 04-20小米13 Ultra评测:搭载全焦段5000万徕卡四摄综合无短板影像旗舰|聚看点
- 04-20天天快讯:宝马mini就冰淇淋事件道歉:工作人员失职
- 04-20世界热头条丨2022年北京共办理专利侵权纠纷行政裁决案件49件
- 04-20邮储银行创新票据服务模式 助力绿色产业发展
- 04-20女子晒衣服不慎10楼跌落悬挂2楼 网友:真是命大(图)
- 04-20美国银行低息揽储时代结束 黄金TD小幅收跌
- 04-20石狮:巧厨娘大显身手 古早味飘香四溢
- 04-20和谐汽车(03836)4月19日斥资约20.24万港元回购22.4万股
- 04-20小摩减持长城汽车(02333.HK)约945.85万股 每股作价约8.85港元|每日快报
- 04-20Civitai站模型管理软件-介绍
- 04-20十年后,电动车价格再跌一半?
- 04-20天天快资讯丨联合国最新预测:到2023年年中,印度人口将超中国