什么是反射?
用字符串数据类型的变量名来访问这个变量的值
反射的方法 getattr hasattr setattr delattr
类、对象、模块都可以使用反射
类
# 类 静态属性 类方法 静态方法 class Student: ROLE = "STUDENT" @classmethod def check_course(cls): print("查看课程") @staticmethod def login(): print("登录") # 反射查看属性 print(getattr(Student, "ROLE")) # 反射调用类方法 getattr(Student, "check_course")() # 反射调用静态方法 getattr(Student, "login")() # 这个方法防止用户瞎鸡儿输入 # 下面这个方法最安全 num = input(">>>") if hasattr(Student, num): getattr(Student, num)()
对象
# 对象 # 方法 对象属性 class A(): def __init__(self, name): self.name = name def func(self): print("in func") a = A('sam') print(a.name) print(getattr(a, "name")) getattr(a, "func")()
模块
# 模块 import os import sys os.rename("__init__.py", "init") getattr(os, "rename")("init", "__init__.py") print(os.rename) print(getattr(os, 'rename')) # 反射自己模块 def sam(): print("sam") def jack(): print("jack") my_file = sys.modules["__main__"] getattr(my_file, "sam")() getattr(my_file, "jack")()