Salut,
Pour transformer:
hashlib.var(mot).hexdigest()
en
hashlib(var)(mot).hexdigest()
on peut faire:
Code:
1 2 3 4 5 6 7 8 9
| import hashlib
def myhash(var):
return lambda mot, var=var: getattr(hashlib, var)(mot)
print myhash('md5')('toto').hexdigest()
# ou
foo = myhash('md5')
print foo('toto').hexdigest() |
Note: Ca en jette mais ca équivaut à mettre var=>getattr(x, var) dans un dict sauf qu'ici on utilise les closures et le dict "locals" qui est déjà là.
Ce qui avec des 'class' devrait s'écrire en plus verbeux:
Code:
1 2 3 4 5
| class MyHash(object):
def __init__(self, var):
self._var = getattr(hashlib, var)
def __call__(self, mot):
return self._var(mot) |
Et si vous voulez limiter le nombre d'objets crées, on peut ajouter
Code:
1 2 3 4 5 6 7
| _instances = {}
def __new__(cls, var):
if var not in cls._instances:
instance = object.__new__(cls)
# instance.__init__(var) -- oops, en fait il y va tout seul
cls._instances[var] = instance
return cls._instances[var] |
- W