反射(python内置方法)

1.反射定义

'''
反射: *******
    反射指的是通过 “字符串” 对 对象的属性进行操作。

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

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

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

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

    # 注意: 反射的四个方法是python内置的。

2.使用方法

# 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()
原文地址:https://www.cnblogs.com/bigbox/p/11960982.html