首页 > 其他 > 详细

反射(hasattr和getattr和setattr和delattr)

时间:2019-11-28 19:51:18      阅读:64      评论:0      收藏:0      [点我收藏+]
反射: 
反射指的是通过 “字符串” 对 对象的属性进行操作。

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

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

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

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

# 注意: 反射的四个方法是python内置的。
class Foo:
    def __init__(self, x, y):
        self.x = x
        self.y = y


foo_obj = Foo(10, 20)
# hasattr
# 通过字符串x 判断对象中是否有 x属性
print(hasattr(foo_obj, ‘x‘))  # True
print(hasattr(foo_obj, ‘y‘))  # True
print(hasattr(foo_obj, ‘z‘))  # False

# getattr
res = getattr(foo_obj, ‘x‘)
print(res)  # 10

# 若属性不存在,则返回默认值
res = getattr(foo_obj, ‘z‘, ‘默认值‘)
print(res)  # 默认值

# setattr
# 为foo_obj设置一个属性z,值为30
setattr(foo_obj, ‘z‘, 30)
print(hasattr(foo_obj, ‘z‘))  # True


# delattr
delattr(foo_obj, ‘x‘)
print(hasattr(foo_obj, ‘x‘))  # False

 

# 反射应用:
class FileControl:

    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_control_obj = FileControl()
file_control_obj.run()

  

 

 

反射(hasattr和getattr和setattr和delattr)

原文:https://www.cnblogs.com/lvguchujiu/p/11952921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!