"""反射总结# 1.需要有一个对象 对象都是有地址的# 2.对象可以使用 对象.函数/属性就可以使用反射"""# class A(object):# sky = 1## def __init__(self, name):# self.name = name## def func(self):# print("is me func")### a = A("phil")# b = input("输入执行的函数:") # b 输入func## # hasattr() getattr等都是调用父类的方法## # getattr(a, b)()"""使用方法一(推荐)"""# if hasattr(a, b): # 判断属性是否存在,返回的是布尔值 存在true 不存在false# print(a.__dict__)# print(A.__dict__)# print(getattr(a, b)) # 不是函数不用加括号 如sky# # getattr(a, b)() # 函数加括号# else:# print("没有值")"""使用方法二(不推荐)"""# if getattr(a,b,None): # 从a的对象空间里获取b 然后再到类A空间里找 都找不到b返回none# pass# else:# print("没有值")# 四件套不需要重写# hasattr(对象名,字符串的属性名) # 作用判断对象是否存在 对象空间里都都是键值对 需要字符串 存在true 不存在false# hasattr(a,"name")# getattr(对象名,要获取的属性以字符串形式写,找不到时的提示语句)# getattr(a, "name", "没有")# setattr(对象名,要设置的属性名必须以字符串的形式写,要设置的值)# setattr(a,"age",19)# delattr(对象名,要删除的属性名必须以字符串的形式写)# delattr(a,"name")"""反射总结"""# 1.需要有一个对象 对象都是有地址的# 2.对象可以使用 对象.函数/属性就可以使用反射# case1 把下面列表由小到大进行排序# my_list = [13, 4, 100, 456]# if hasattr(my_list, "sort"):# getattr(my_list, "sort")()# print(my_list) # [4, 13, 100, 456]## else:# print("没找到")# case2 执行没有类的两个函数def func(): print(1)def foo(): print(2)import sysprint(sys.modules)print(sys.modules[__name__])obj = sys.modules[__name__] # 得到这个py文件对象obj.func() # 结果 1if hasattr(obj,"func"): getattr(obj, "func")() # 结果 1else: print("没找到")# case 3 导的包也是对象 python中一切皆对象import timeif hasattr(time,"time"): print(getattr(time,"time")())else: print("无")
python反射
时间:2023-05-27
相关推荐