Изменить значения внутреннего словаря через атрибуты - PullRequest
1 голос
/ 08 февраля 2012

У меня есть класс, где конструктор берет словарь. Одним из значений в словаре является другой словарь. Я установил каждый из ключей в этом последнем словаре как атрибут моего класса.

class MyType(object):
    def __init__(self, d):
            self.__d = d
            for k,v in self.__d['Options'].items():
                setattr(self, k, v)
    def __GetName(self):
        return self.__d['Name'] 
    Name = property(__GetName, None, None, "The name of my type")
    def __GetOptions(self):
        return self.__d['Options']
    Options = property(__GetOptions, None, None, "The options of my type")

myType = MyType({'Name': "Summary", 'Options': {'Minimum': 5, 'Treshold': 7}})

Я хотел бы иметь возможность изменять значения в словаре параметров через атрибут с тем же именем:

myType.Minimum = 13

print myType.Options['Minimum'] # returns 5, I would like to see here 13

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Попробуйте это:

def __setattr__(self,name,value):
    self.__dict__[name] = value
    self.__dict__['_MyType__d']['Options'][name] = value

переопределение __setattr__ класса MyType.Я проверил, что

print myType.Options['Minimum']
print myType.Minimum 

правильно печатать 13 (оба).

редактировать: добавлена ​​ссылка http://docs.python.org/reference/datamodel.html#customizing-attribute-access

0 голосов
/ 08 февраля 2012

Просто попробуйте

myType.Options ['Minimum'] = 13

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...