вызов методов для экземпляра с помощью getattr [python] - PullRequest
1 голос
/ 27 января 2009

Я пытался написать некоторый код, который проверял бы, есть ли у элемента некоторые атрибуты, и вызывать их Я пытался сделать это с getattr, но изменения не будут постоянными. Я сделал "фиктивный" класс, чтобы проверить это. Вот код, который я использовал для класса:


class X:                                         
   def __init__(self):
     self.value = 90  
   def __get(self):   
     return self.value
   def __set(self,value):
     self.value = value  
   value = property(__get,__set)

x = X()
print x.value # this would output 90
getattr(x,"value=",99) # when called from an interactive python interpreter this would output 99
print x.value # this is still 90 ( how could I make this be 99 ? ) 

Спасибо!

Ответы [ 2 ]

8 голосов
/ 27 января 2009

Вам нужно сделать что-то вроде

class X:                                         
   def __init__(self):
     self._value = 90  

   def _get(self):   
     return self._value

   def _set(self, value):
     self._value = value  

   value = property(_get, _set)

Обратите внимание, что внутренняя переменная должна иметь имя, отличное от свойства (я использовал _value).

Тогда

setattr(x, 'value', 99)

должно работать.

2 голосов
/ 27 января 2009
getattr(x,"value=",99)

возвращает 99, потому что x не имеет атрибута "value =" (обратите внимание на знак равенства), поэтому getattr возвращает заданное по умолчанию значение (99).

...