Ну или как создать dotted dict

При работе с Python частенько, по привычке, хочется притянуть что-нибудь из других языков. Не всегда это полезно и правильно, но…

В PHP можно создать объект, похожий на dict в Python, но с возможностью обращаться через оператор доступа к свойствам. Проще показать:

$mydict = (object) [ # new stdClass
'foo' => 123,
'bar' => fn($x)=> $x + 1
];
$mydict->foo; # = 123

Ну и аналог в JavaScript:

mydict = {
foo: 123,
bar: x => x + 1
}
mydict.foo // = 123

Ну и по привычке я ожидал, что смогу в Python писать так:

mydict = {
'foo': 123,
'bar': lambda x: x + 1
}
mydict.foo # Error

Иногда такое хочется и кажется удобным. Реализовать такой функционал, как оказалось, очень даже просто в пару строк кода:

class StdClass(dict):
__getattr__ = dict.get
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__

Все. Мы просто немного расширили стандартный класс dict и теперь можем творить такие чудеса:

mydict = StdClass({
'foo': 123,
'bar': lambda x: x + 1
})
print(mydict.bar( mydict.foo ))
mydict.buz = 'abc'

Просто, имхо, это сильно приятнее чем писать:

print(mydict['bar']( mydict['foo'] ))
mydict['buz'] = 'abc'