反射与约束与加密

一,反射

模块

 1 f0 = 9
 2 
 3 def f1():
 4     print('F1')
 5 
 6 def f2():
 7     print('F2')
 8 
 9 def f3():
10     print('F3')
11 
12 def f4():
13     print('F4')
14 
15 def f5():
16     print('F5')

如果调用上面模块里的函数f1,f2,f3,f4,f5,可以使用if,即

 1     """
 2     if val == 'f1':
 3          handler.f1()
 4     elif val == 'f2':
 5          handler.f2()
 6      elif val == 'f3':
 7         handler.f3()
 8     elif val == 'f4':
 9        handler.f4()
10    elif val == 'f5':
11       handler.f5()
12    """

可以使用getattr

 1 # by luffycity.com
 2 from types import FunctionType
 3 import handler
 4 
 5 while True:
 6     print("""
 7     系统支持的函数有:
 8         1. f1
 9         2. f2
10         3. f3
11         4. f4
12         5. f5
13     """)
14     val = input("请输入要执行的函数:") # val = "f1"
15 
16     
17     
18     if hasattr(handler,val):
19         func_or_val = getattr(handler,val)     # 根据字符串为参数,去模块中寻找与之同名的成员。
20         if isinstance(func_or_val,FunctionType):
21             func_or_val()
22         else:
23             print(func_or_val)
24     else:
25         print('handler中不存在输入的属性名')
26 
27     # 正确方式
28     """
29     if val == 'f1':
30         handler.f1()
31     elif val == 'f2':
32         handler.f2()
33     elif val == 'f3':
34         handler.f3()
35     elif val == 'f4':
36         handler.f4()
37     elif val == 'f5':
38         handler.f5()
39     """

除此之外还有另外三个,总结一下为:

getattr # 根据字符串的形式,去对象中找成员。
hasattr # 根据字符串的形式,去判断对象中是否有成员。
setattr # 根据字符串的形式,去判断对象动态的设置一个成员(内存)(添加时不会改变原来的模块文件,只会添加到内存中)
delattr # 根据字符串的形式,去判断对象动态的设置一个成员(内存)(删除时不会改变原来的模块文件,只会删除内存中)
总结一下什么后面可以加():
  • 方法
  • 函数
  • 对象
 1 def func():
 2     pass
 3 
 4 
 5 class Foo(object):
 6     def __call__(self, *args, **kwargs):
 7         pass
 8     def func(self):
 9         pass
10 obj = Foo()
11 
12 
13 print(callable(func))
14 print(callable(Foo))
15 print(callable(obj))
16 print(callable(obj.func))

二,约束

 三,加密

 1 
 2 
 3 import hashlib
 4 
 5 SALT = b'2erer3asdfwerxdf34sdfsdfs90' #此过程成为加盐,这样的话会在加密过程中加入一些自己的字码,达到无法破解的效果。
 6 
 7 def md5(pwd):
 8     # 实例化对象
 9     obj = hashlib.md5(SALT)
10     # 写入要加密的字节
11     obj.update(pwd.encode('utf-8')) #必须使用encode,即字节
12     # 获取密文
13     return obj.hexdigest() # 21232f297a57a5a743894a0e4a801fc3 # 66fbdc0f98f68d69cd458b0cee975fe3 # c5395258d82599e5f1bec3be1e4dea4a
14 
15 
16 user = input("请输入用户名:")
17 pwd = input("请输入密码:")
18 if user == 'oldboy' and md5(pwd) == 'c5395258d82599e5f1bec3be1e4dea4a':
19     print('登录成功')
20 else:
21     print('登录失败')

 

posted on 2023-12-12 22:53  我才是最帅的那个男人  阅读(29)  评论(0)    收藏  举报

导航