反射

反射

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

一、hasattr

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

二、getattr

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

三、setattr

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

四、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

反射应用get

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()
相关文章
相关标签/搜索