can't find the right simplification

Peter Otten __peter__ at web.de
Fri Apr 24 01:39:13 EDT 2009


Stef Mientki wrote:

> I've a program where you can connect snippets of code (which I call a 
> "Brick") together to create a program.
> To make it easier to create these code snippets, I need some 
> simplifications.
> For simple parameters ( integer, tupple, list etc)  this works ok,
> and is done like this:
> 
> 
> class _Simple_Par ( object ) :
>     """
>     Class to make it more easy to set a Bricks.Par from a control.
>     So instead of :
>       self.Brick.Par [ self.EP[0] ] = Some_Value
>     you can write
>       self.P[0] = Some_Value
>     """
>     def __init__ ( self, control ) :
>         self.Control = control
>     def __setitem__ ( self, index, value ) :
>         i = self.Control.EP [ index ]
>         if i :
>             self.Control.Brick.Par [ i ] = value
> 
> Now I want a similar simplification for the case that Par is a dictionary:
> So instead of writing:
>       self.Brick.Par [ self.EP[0] ] [ 'Filename' ] = Some_Value
> 
> I would like to write:
>       self.P[0] [ 'Filename' ] = Some_Value
> 
> But I can't figure out how to accomplish that ?
> 
> Any suggestions ?

Are you about to confuse your cat, too? Here's the modified example:

class Brick(object):
    def __init__(self):
        self.Par = [dict(a=1), dict(b=2), dict(c=3)]

class P(object):
    def __init__(self, parent):
        self.parent = parent
    def __getitem__(self, index):
        p = self.parent
        return p.Brick.Par[p.EP[index]]

class A(object):
    def __init__(self):
        self.Brick = Brick()
        self.EP = [2,1,0]
        self.P = P(self)

    def demo(self):
        print "before:", self.Brick.Par
        self.P[0]["yadda"] = "whatever"
        print "after:", self.Brick.Par

a = A()
a.demo()

Peter



More information about the Python-list mailing list