python 反射

"""反射总结
# 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 sys
print(sys.modules)
print(sys.modules[__name__])
obj = sys.modules[__name__]  # 得到这个py文件对象
obj.func()  # 结果 1
if hasattr(obj,"func"):
    getattr(obj, "func")()  # 结果 1
else:
    print("没找到")


# case 3 导的包也是对象 python中一切皆对象
import time
if hasattr(time,"time"):
    print(getattr(time,"time")())
else:
    print("无")



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值