反射(hasattr和getattr和setattr和delattr)

为君一笑 提交于 2019-12-06 00:11:47
反射:     反射指的是通过 “字符串” 对 对象的属性进行操作。    - 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()

  

 

 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!