Python反射

发布时间 2023-04-22 07:52:19作者: 钟爱酷夏

反射:用字符串类型的名字去操作变量,没有安全问题。本质是反射对象中的属性和方法。

反射对对应的方法有:getattr, setattr, delattr

getattr

class A:
    def func(self):
        print('in func')

a = A()
a.name = 'alex'
a.age = 63
# 反射对象的属性
ret = getattr(a,'name')  # 通过变量名的字符串形式取到的值
print(ret)
print(a.__dict__)  ###打印属性与方法
print(a.__dir__())  
通过反射获取对象属性
class A:
    a_list =[1, 3, 5, 7, 9]
    @classmethod
    def func(cls):
        print(cls.a_list)
    @staticmethod
    def func2():
        print(A.a_list, "太好了")

print(getattr(A, 'a_list'))
print(getattr(A, 'func')())
getattr(A, 'func2')()
反射类的方法 :classmethod staticmethod

【注】反射类的方法只支持 :classmethod staticmethod,不支持类函数

# import mymodule
# 反射模块的属性
# print(my.day)
 # print(getattr(mymodule,'day'))

# 反射模块的方法
# getattr(mymodule,'wahaha')()

#################
def func():
    print('func111111')
year = 2018

# 反射自己模块中的变量
print(getattr(sys.modules['__main__'],'year'))

# 反射自己模块中的函数
getattr(sys.modules['__main__'],'func')()
变量名 = input('>>>')
print(getattr(sys.modules[__name__],变量名))


# 内置模块
# time
# asctime
# import time
# print(getattr(time,'time')())
# print(getattr(time,'asctime')())
反射模块