У меня есть класс модели с методами getter и setter, а также случайные статические методы. Я хотел бы обеспечить использование строк unicode в качестве аргументов для конкретных методов, и использование декораторов было первой моей идеей. Теперь у меня есть что-то вроде этого:Как обеспечить применение аргументов unicode для методов?
import 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')
В приведенном выше коде метод вызова внутри отделочника __call__
терпит неудачу из-за неправильного подсчета аргументов (потому что «Foo» объект исх отсутствует?). Прежде чем сделать что-то глупое, я хотел спросить вас, ребята. Как это должно быть сделано?
Я знаю, что это неряшливо, но предотвращение закодированных строк здесь избавит меня от многих неприятностей позже при сохранении данных в базе данных. – tuomur
@eclaird: После того, как вы абсолютно положительно * потребуете * unicode, просто назовите 'unicode()' на все, что у вас есть, и назовите это хорошо. – Teddy