J'ai une classe model avec les méthodes getter et setter, et les méthodes statiques occasionnelles. Je voudrais imposer l'utilisation de chaînes Unicode comme arguments pour des méthodes spécifiques et l'utilisation de décorateurs était la première idée que j'avais. Maintenant, j'ai quelque chose comme ceci:Comment appliquer des arguments Unicode pour les méthodes?
nombreimport types
class require_unicode(object):
def __init__(self, function):
self.f = function
def __call__(self, string):
if not isinstance(string, types.UnicodeType):
raise ValueError('String is not unicode')
return self.f(string)
class Foo(object):
something = 'bar'
@staticmethod
@require_unicode
def do_another(self, string):
return ' '.join(['baz', string])
@require_unicode
def set_something(self, string):
self.something = string
foo = Foo()
foo.set_something('ValueError is raised')
foo.set_something(u'argument count error')
foo.do_another('ValueError is raised')
foo.do_another(u'argument count error')
Dans le code ci-dessus __call__
de l'appel de méthode à l'intérieur de décorateur échoue en raison d'une mauvaise argument (parce que l'arbitre objet « foo » est manquante?). Avant de faire quelque chose de stupide, je voulais vous demander les gars. Comment cela devrait-il être fait?
Je sais que c'est unpython, mais empêcher les chaînes codées ici me sauverait de beaucoup de problèmes plus tard lors de l'enregistrement des données données dans la base de données. – tuomur
@eclaird: Une fois que vous avez absolument * demandé * unicode, appelez 'unicode()' sur tout ce que vous avez et appelez-le bien. – Teddy