我非常清楚在Python中使用eval
是不好的做法。这是我的代码:
from hashlib import * # added for clarification
def get_hash(self):
if self.hash_type in ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']:
data = eval(self.hash_type) # <--- how can I replace this?
我听说过setattr
函数,但老实说我不知道如何实现它。
是否也可以使用map
功能执行此操作?
请注意'md5', 'sha1', 'sha224'
等是局部变量。当我在其中一个上使用eval
函数时,它们就变成了函数。
答案 0 :(得分:6)
您可以使用getattr
:
import hashlib
if self.hash_type in ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']:
func = getattr(hashlib, self.hash_type)
答案 1 :(得分:3)
为什么不将所有信息存储在字典中?例如:
self.hash_types = {
'md5': md5,
'sha1': sha1,
...
}
然后在get_hash
:
def get_hash(self):
if self.hash_type in self.hash_types:
data = self.hash_types[self.hash_type]
可替换地,
def get_hash(self):
data = self.hash_types.get(self.hash_type, self.DEFAULT)