Python之路——反射
1 # import time 2 # print(time.strftime('%Y-%m-%d %H:%M:%S')) 3 # print(getattr(time,'strftime')('%Y-%m-%d %H:%M:%S')) 4 5 # isinstance issubclass 6 # class A:pass 7 # class B(A):pass 8 # a = A() 9 # print(isinstance(a,A)) # True 10 # print(issubclass(B,A)) # True 11 # print(issubclass(A,B)) # False 12 13 14 # name = 1 15 # eval('print(name)') # 有安全隐患 16 # 用反射就没有安全问题 17 # 反射:用字符串类型的名字去操作变量 18 # 反射对象中的属性和方法 # hasattr getattr setattr delattr 19 # class A: 20 # def func(self): 21 # print('in func') 22 # def get_name(self): 23 # return self.name 24 # def func2(): 25 # print('in func2') 26 # 27 # def func3(self): 28 # print('in func3') 29 # a = A() 30 # a.name = 'Alex' 31 # a.age = 63 32 # if hasattr(a,'name'): 33 # ret = getattr(a,'name') 34 # print(ret) 35 # setattr(a,'func2',func2) # 将方法绑定到对象上,只有该对象可以调用此方法,对象的类以及其他对象不能调用此方法 36 # a.func2() #将方法绑定到对象的属性上,外部定义的函数可以没有self参数 37 # setattr(A,'func3',func3) # 将外部函数绑定到类的属性上,外部函数的定义需带self参数 38 # b = A() 39 # b.func3() # 对象调用时,正常调用即可 40 # 41 # delattr(A,'get_name') 42 # a.func() 43 44 # class A: 45 # price = 20 46 # @classmethod 47 # def func(cls): 48 # print('in func') 49 # print(getattr(A,'price')) # 反射类的属性 50 # print(getattr(A,'func')()) # 反射类的方法 51 52 # 模块 53 # import my 54 # print(my.day) 55 # print(getattr(my,'day')) 56 # getattr(my,'wahaha')() 57 58 59 # 内置模块 60 # import time 61 # print(getattr(time,'time')()) 62 # print(getattr(time,'asctime')()) 63 # print(time.strftime('%Y-%m-%d %H:%M:S')) 64 # print(getattr(time,'strftime')('%Y-%m-%d %H:%M:S')) 65 66 # def qqxing(): 67 # print('qqxing') 68 # year = 2018 69 # import sys 70 # print(sys.modules['__main__'].year) 71 # print(getattr(sys.modules['__main__'],'year')) # 反射自己模块中的变量 72 # print(getattr(sys.modules['__main__'],'qqxing')()) # 反射自己模块中的函数 73 # 74 # import my 75 # print(getattr(my,'C')) # 反射一个模块中的类