доступ к словарям в стиле объекта Python; не могу понять

class ObjectDict(dict):
    """ allows object style access for dictionaries """

    def __getattr__(self, name):
        if name in self:
            return self[name]
        else:
            raise AttributeError('No such attribute: %s' % name)

    def __setattr__(self, name, value):
        self[name] = value

    def __delattr__(self, name):
        if name in self:
            del self[name]
        else:
            raise AttributeError('No such attribute: %s' % name)

может кто-нибудь объяснить этот код для меня? Я просто новичок в питоне.


person Arjun Biju    schedule 01.03.2018    source источник
comment
В чем конкретно вам нужна помощь в понимании? Это слишком широко.   -  person Carcigenicate    schedule 01.03.2018
comment
Связано - stackoverflow.com/questions /4295678/   -  person OneCricketeer    schedule 01.03.2018


Ответы (2)


__getattr__ используется, когда вы хотите получить данные.

__setattr__ используется, когда вы хотите установить данные.

__delattr__ используется, когда вы хотите удалить данные.

Теперь методы должны быть совершенно ясны.

def __getattr__(self, name):
    # if the key exists... return it.
    if name in self:
        return self[name]
    # if not : raise an error.
    else:
        raise AttributeError('No such attribute: %s' % name)

def __setattr__(self, name, value):
    # set VALUE as value, with NAME as key in the dict.
    self[name] = value

def __delattr__(self, name):
    # if the key "name" exists in the dictionnary... delete it
    if name in self:
        del self[name]
    # else, it doesnt exist, so cant delete it.
    else:
        raise AttributeError('No such attribute: %s' % name)
person IMCoins    schedule 01.03.2018
comment
спасибо очень полезно - person Arjun Biju; 03.03.2018
comment
Я приглашаю вас принять ответ, если вы нашли его наиболее полезным для вас. :) - person IMCoins; 03.03.2018

Экземпляр ObjectDict является обычным словарем через наследование классов. См. ObjectDict(dict)

Волшебная функция __getattr__ позволяет определить доступ к записи через точку для любого объекта. И здесь просто вызывается обычный доступ к словарю

Точно так же __setattr__ и __delattr__ позволяют устанавливать и удалять (используя выражение Python del) значения из точечной записи. Однако для установки вложенных значений необходимо, чтобы значение первого ключа также было ObjectDict.

person OneCricketeer    schedule 01.03.2018