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'))  # 反射一个模块中的类

 

posted @ 2018-01-22 16:11  liuyankui163  阅读(94)  评论(0编辑  收藏  举报