前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中的反射介绍

Python中的反射介绍

作者头像
小博测试成长之路
发布2023-09-01 08:33:07
2140
发布2023-09-01 08:33:07
举报
文章被收录于专栏:软件测试学习

反射是指在程序运行时,可以动态地获取对象的类型信息、属性和方法等信息,并可以对这些信息进行操作的一种机制。在Python中,反射是通过一组内置的函数和语句来实现的。你可以使用以下四个内置函数来实现Python中的反射:getattr、setattr、hasattr和delattr。

  • getattr(object, name[, default]):返回对象指定名称的属性值。如果属性不存在,则返回default值(如果提供了)。
  • setattr(object, name, value):将对象指定名称的属性设置为value。
  • hasattr(object, name):如果对象具有名称为name的属性或方法,则返回True。
  • delattr(object, name):从对象中删除名称为name的属性或方法。

下面简单看一下这几个函数的一些用法:

代码语言:javascript
复制
import types


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hi(self):
        print("Hello! My name is", self.name)


# 创建一个Person对象
p1 = Person("小博", 18)

# 使用getattr获取属性值
print(getattr(p1, "name"))  # 输出:小博
print(getattr(p1, "age"))  # 输出:18

# 使用setattr设置属性值
setattr(p1, "name", "小博测试成长之路")
print(p1.name)  # 输出:小博测试成长之路

# 使用hasattr检查属性是否存在
print(hasattr(p1, "age"))  # 输出:True
print(hasattr(p1, "sex"))  # 输出:False

# 使用delattr删除属性
delattr(p1, "age")
print(hasattr(p1, "age"))  # 输出:False


# 利用反射添加一个函数
def say_welcome(self):
    print("谢谢关注! My name is", self.name)


setattr(p1, "say_welcome1", say_welcome)
p1.say_welcome1(p1)  # 输出:谢谢关注! My name is 小博测试成长之路

# 将函数绑定到实例,确保正确地传递self参数
p1.say_welcome2 = types.MethodType(say_welcome, p1)
p1.say_welcome2()   # 输出:谢谢关注! My name is 小博测试成长之路

注意:types.MethodType() 是 Python 标准库 types 模块中的一个函数,用于将函数绑定到一个特定的对象上,从而创建一个方法。绑定后的方法会自动将对象本身作为第一个参数(通常命名为 self)传递给函数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小博测试成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档