栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 反射

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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("无")



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739447.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号