Re: (beginners question) howto set self.field4.subfield8='asdf'?

2007-02-19 Thread Stargaming
[EMAIL PROTECTED] wrote:
> Thx
> but is there any simpleir way, if using not class, but just struct (or
> something like that, MATLAB equivalent for that one)?

Use this::

 >>> A = type('', (), {})
 >>> a = A()
 >>> a
<__main__. object at 0x009E8490>
 >>> a.foo = 42
 >>> a.foo
42

But perhaps using this (with a better name) would be more sensible 
(according to readability)::

 >>> class B: pass
...
 >>> b = B()
 >>> b.foo = 42
 >>> b.foo
42

> I'm thinking of rewriting some optimization solvers (non-smooth,
> constrained, with (sub)gradients or patterns provided by user) to
> Python and I don't know currently is it possible to easy convert
> things like
> prob = [];
> prob.advanced.ralg.hs = 1 (so in this line all subfields are
> generating automatically in MATLAB or Octave)

Perhaps something like this would be suitable::

 >>> class Autocreating(object):
...   def __getattr__(self, attr):
... if hasattr(self, attr)
...   setattr(self, attr, Autocreating())
... return getattr(self, attr)
...
 >>> a = Autocreating()
 >>> a.foo = 42
 >>> a.foo
42
 >>> a.hello.world = 23
 >>> a.hello
<__main__.Autocreating object at 0x...>
 >>> a.hello.world
23

But this is perhaps not a good way because it's way too implicite.

> I have huge amount of such lines, and implementing separate class for
> each one is unreal.

You don't have to implement a separate class for *each one*. Use one 
class for every attribute, you can reuse it. But perhaps something like 
a dict is better for your purposes, anyways.

HTH,
Stargaming
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: (beginners question) howto set self.field4.subfield8='asdf'?

2007-02-19 Thread openopt
Thx
but is there any simpleir way, if using not class, but just struct (or
something like that, MATLAB equivalent for that one)?
I'm thinking of rewriting some optimization solvers (non-smooth,
constrained, with (sub)gradients or patterns provided by user) to
Python and I don't know currently is it possible to easy convert
things like
prob = [];
prob.advanced.ralg.hs = 1 (so in this line all subfields are
generating automatically in MATLAB or Octave)
I have huge amount of such lines, and implementing separate class for
each one is unreal.
Thank you in advance, Dmitrey


-- 
http://mail.python.org/mailman/listinfo/python-list


Re: (beginners question) howto set self.field4.subfield8='asdf'?

2007-02-19 Thread Peter Otten
[EMAIL PROTECTED] wrote:

> Thx
> but is there any simpleir way, if using not class, but just struct (or
> something like that, MATLAB equivalent for that one)?
> I'm thinking of rewriting some optimization solvers (non-smooth,
> constrained, with (sub)gradients or patterns provided by user) to
> Python and I don't know currently is it possible to easy convert
> things like
> prob = [];
> prob.advanced.ralg.hs = 1 (so in this line all subfields are
> generating automatically in MATLAB or Octave)
> I have huge amount of such lines, and implementing separate class for
> each one is unreal.

Get used to thinking of a class as a lightweight construct written with
well-defined constraints rather than some know-it-all can-do-everything
unwieldy monster. You can of course use one class throughout

>>> class Struct:
... def __init__(self, **kw):
... self.__dict__.update(kw)
...
>>> a = Struct(f=42)
>>> b = Struct(x=1, y=2)
>>> a.f
42
>>> b.x, b.y
(1, 2)

but separate classes don't require much more effort and make your code both
more readable and more flexible.

Peter


-- 
http://mail.python.org/mailman/listinfo/python-list


Re: (beginners question) howto set self.field4.subfield8='asdf'?

2007-02-19 Thread openopt
Thx
but is there any simpleir way, if using not class, but just struct (or
something like that, MATLAB equivalent for that one)?
I'm thinking of rewriting some optimization solvers (non-smooth,
constrained, with (sub)gradients or patterns provided by user) to
Python and I don't know currently is it possible to easy convert
things like
prob = [];
prob.advanced.ralg.hs = 1 (so in this line all subfields are
generating automatically in MATLAB or Octave)
I have huge amount of such lines, and implementing separate class for
each one is unreal.
Thank you in advance, Dmitrey


-- 
http://mail.python.org/mailman/listinfo/python-list


Re: (beginners question) howto set self.field4.subfield8='asdf'?

2007-02-19 Thread Peter Otten
[EMAIL PROTECTED] wrote:

> I have
> class A:
> def __init__(self, objFun, x0):
> #(I want to have self.primal.f = objFun)
> #both
> self.primal.f = objFun
> #and
> self.primal = None
> self.primal.f = objFun

None is a singleton, so if Python were to allow the above f would always be
the objFun of the last created A instance.

> yields error
> what should I do?

Make a dedicated Primal class:

>>> class Primal:
... pass
...
>>> class A:
... def __init__(self, fun, x0):
... self.primal = Primal()
... self.primal.f = fun
...
>>> def square(x): return x*x
...
>>> a = A(square, 42)
>>> a.primal.f


Even better, because it makes no assumptions about the internal layout of
Primal:

class Primal:
   def __init__(self, f):
  self.f = f

...
self.primal = Primal(fun)
...

Peter

-- 
http://mail.python.org/mailman/listinfo/python-list


(beginners question) howto set self.field4.subfield8='asdf'?

2007-02-19 Thread openopt
I have
class A:
def __init__(self, objFun, x0):
#(I want to have self.primal.f = objFun)
#both
self.primal.f = objFun
#and
self.primal = None
self.primal.f = objFun

yields error
what should I do?
Thx

-- 
http://mail.python.org/mailman/listinfo/python-list