python反射

一:反射


class Student():
    school = 'sh'
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def func(self):
        print('from func')

stu = Student('ly', 18)
1.对象内使用
正常获取值
print(stu.name)
用字符串取值 报错
print(stu."name")

通过字符串获取属性
print(stu.__dict__['name'])  # 如果对象不存在直接报错


1.getattr
getattr(stu, 'name')  # 等价于 stu.name
通过字符串获取对象里面的属性 正常取值
print(getattr(stu, 'name'))  # 正常取值 :ly


2.getattr
通过字符串获取属性 如果没有该属性  不会报错  给个默认值 会返回None  不会报错
print(getattr(stu, 'name', None))


取类中方法
正常取值
stu.func()  # 结果:from func

3.getattr
通过字符串取方法
getattr(stu, 'func')()  # 结果:from func



增加属性  字符串操作
4.setattr

新增值     变量名   变量值
setattr(stu, 'x', 123)
查看内存地址
print(stu.__dict__)   # 结果:{'name': 'ly', 'age': 18, 'x': 123}


5.hasattr 查看该属性是否存在
在返回 True   不在返回False
print(hasattr(stu, 'name'))

6.delattr  删除属性

delattr(stu, 'name')
print(stu.__dict__)  # 结果:{'age': 18}
2.类使用
1.获取类属性getattr
print(getattr(Student, 'school'))  # 结果:sh



模块
正常使用time模块
import time
time.sleep(1)

getattr实现
getattr(time, 'sleep')(2)

底层原理
__import__('time')  # import time

底层原理
time = __import__('time')
time.sleep(3)

image

posted @ 2021-12-07 22:46  AlexEvans  阅读(19)  评论(0编辑  收藏  举报