Altered States also contains an optional feature called Expando objects. It’s a simple object that can be used to create replacement structures easily. It’s basically an empty object that you can add any extra attributes to, with a conceptual implementation along the lines of:
class Expando(object): def __init__(self, *args, **kw): self.__dict__.update(kw)
Full source is marginally more complex, see here. So if you need an object with another object embedded that has a method you can create that with:
>>> from altered import Expando >>> faked_ctx = Expando(user=Expando(get_name=lambda: 'Foo Bar')) >>> faked_ctx.user.get_name() 'Foo Bar'
Using and Expando object with Altered States can look like this:
>>> from altered import Expando, state >>> obj = Expando(a=1) >>> @state(obj, a=3) ... def fn(): ... return obj.a >>> fn() 3
Expando classes are aliased to the name E if you’re seeking maximum terseness.