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