2015-02-16 2 views
0

Так что я использую функцию, чтобы перестать копировать код + макароны везде, который имеет то же самое, что и минус сообщения об ошибках, которые я хочу, чтобы исключение отображалось, но я хочу иметь доступ и динамически устанавливать переменные класса для разбора Django.Динамическое присваивание переменным класса

Например: Я знаю, что если вы подаете vars() ['{}'. Format (a_variable)], пока указана переменная, вы можете получить к ней доступ. Но как вы это делаете для случаев? Код ниже не работает, но контуры того, что я хотел бы достичь, если есть ВАР() как функции для экземпляров или случайным образом о/лучший способ сделать это:

class test(object): 
    max_length = 10 
    text = 'blah' 
    name = 'hrrrnngg' 

    def set_name(self, text): 
     self.name = self._parse_text(text, 'name') 

    def set_text(self, text): 
     self.text = self._parse_text(text, 'text') 

    def _parse_text(self, data, variable): 
     # a simple idea, but much exception coding in here, i.e. negatives, ranges e.t.c. 
     if len(data) + len(vars()['self.{}'.format(variable)]) > self.max_length: 
      print "You have failed this city" 
     else: 
      return "{}, {}".format(vars()['self.{}'.format(variable)], data) 

a = test() 
print a.text 
a.set_text('moo') 
print a.text 

Спасибо заранее!

+2

Вы ищете [ 'GetAttr (я, переменная)'] (HTTPS: //docs.python.org/2/library/functions.html#getattr)? – jonrsharpe

+0

Ты, сэр, гений. – Trancendence

+0

Я возьму это как да! – jonrsharpe

ответ

0

Благодаря @jonrsharpe Исправленный код:

class test(object): 
    max_length = 10 
    name = 'batman' 
    text = 'blah' 

    def set_name(self, text): 
     self.name = self._parse_text(text, 'name') 

    def set_text(self, text): 
     self.text = self._parse_text(text, 'text') 

    def _parse_text(self, data, variable): 
     if len(data) + len(getattr(self, str(variable))) > self.max_length: 
      print "You have failed this city" 
      return getattr(self, str(variable)) 
     else: 
      return getattr(self, str(variable)) + data 


a = test() 
print a.text 
a.set_text('moo') 
print a.text 
a.set_text('derppphard') 
print a.text 

Этот код выводит на консоль:

$ blah 
$ blahmoo 
$ You have failed this city 
$ blahmoo 
+1

Нет смысла указывать '' {} '. Format (variable) '- все ваши примеры уже являются строками (и если не просто использовать' ул (переменная) '). – jonrsharpe

+0

Отредактировано: Спасибо, что кучи! Такой удобный инструмент для изучения! – Trancendence

+0

На самом деле это не ответ, но я написал более Pythonic версию, чтобы вы могли посмотреть: https://gist.github.com/textbook/c58450994506d565b7c1 – jonrsharpe

Смежные вопросы