反射

反射

反射指的是通过 “字符串” 对对象的属性和方法进行操作,python内置的方法

1、hasattr

通过 “字符串” 判断对象的属性或方法是否存在

2、getattr

通过 “字符串” 获取对象的属性或方法

3、setattr

通过 “字符串” 设置对象的属性或方法

4、delattr

通过 “字符串” 删除对象的属性或方法

class Foo:
    x = 10
    y = 20
    def date(self):
        print('天王盖地虎,小鸡炖蘑菇')

obj = Foo()
# 判断对象属性或方法是否存在
print(hasattr(obj, 'x'))  # True
print(hasattr(obj, 'z'))  # False

# #获取对象方法或属性
print(getattr(obj, 'x'))  # 10
# # 可以设置默认值,值不存在时返回默认值,否则会报错
print(getattr(obj, 'z', '默认值'))  # 默认值
# # 获取对象的方法
res = getattr(obj, 'date')  
res()  # 天王盖地虎,小鸡炖蘑菇

# 设置对象方法或属性
# 此处设置的对象属性是在对象下面的,不是在类下面
setattr(obj, 'z', 30)
print(hasattr(obj,'z'))  # True
setattr(obj, 'x', 100)
print(getattr(obj, 'x'))  # 100

# 删除对象属性或方法,只能删除对象下的属性或方法,类里的没法删除,所有显示还是有x
delattr(obj, 'x')
print(hasattr(obj, 'x')) # True

反射应用

class File:
    def run(self):
        while True:
            # 让用户输入上传或下载命令
            user_input = input('请输入upload上传或download下载:').strip()
            # 判断输入的命令是否存在,并调用相应的方法
            if hasattr(self, user_input):
                func = getattr(self, user_input)
                func()
            else:
                print('输入有误')

    def upload(self):
        print('正在上传...')

    def download(self):
        print('正在下载...')
file_obj = File()
file_obj.run()
posted @   Mr沈  阅读(105)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示

目录