2014-09-11 3 views
0

Я пытаюсь создать класс с некоторыми переменными.Переменные класса Python __setitem__

def __setitem__(self, item, value): 
    switch = { 
     "hour" : self.hour, 
     "minute" : self.minute, 
     "second" : self.second, 
     "day" : self.day, 
     "dennidoby" : self.dennidoby, 
     "season" : self.season, 
     "month" : self.month, 
     "year" : self.year, 
     "dayr" : self.dayr, 
     "dennitepl" : self.dennitepl, 
     "pocasitepl" : self.pocasitepl, 
     "wheather" : self.wheather, 
     "temperature" : self.temperature, 
     "obdobi" : self.obdobi, 
     "den" : self.den, 
     "mesic" : self.mesic 
     } 
    switch[item] = value 

я вызываю с кодом:

cas["wheather"] = "storm" 

Но:

switch[item] = value 

не работает для заданной переменной в объекте.

+0

Что вы хотите, чтобы запустить этот код? Не зная об этом, всем трудно сказать, как получить то, что вы хотите. – abarnert

ответ

3

Ну, нет. switch - локальная переменная: она будет удалена после выхода метода __setitem__ и будет восстановлена ​​с вашими жестко заданными значениями при следующем вызове метода.

Вы должны перенести начальную населенность переменной на __init__ и ссылаться на нее как self.switch и там, и в __setitem__.

2

Каждый раз, когда вы звоните __setitem__, вы создаете новый словарь под названием switch. Затем вы обновите этот словарь с помощью switch[item] = value. switch, по-видимому, не связан с экземпляром self. Если вы хотите экземпляры вашего класса, чтобы эти пары ключ/значение, и вы также хотите обновить с __setitem__, я хотел бы сделать что-то вроде этого:

class Cas(object): 

    def __init__(self): 
    self._switch = { ... #what you had...} 

    def __setitem__(self, item, value): 
     self._switch[item] = value 

    def __getitem__(self, item): 
     return self._switch[item] 

Однако от того, что вы поделились, это могло бы только иметь смысл чтобы использовать dict или подкласс dict

1

Вы можете изменить значение атрибута динамически с помощью SetAttr (пункт, значение). Так что ваш код будет выглядеть следующим образом:

def __setitem__(self, item, value): 
    self.__setattr__(item, value) 

Это должно сделать задачу.

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