best way to code
eric
eric at ericaro.net
Fri Dec 19 12:36:31 EST 2008
On Dec 19, 5:35 pm, Peter Otten <__pete... at web.de> wrote:
> eric wrote:
> > hi,
>
> > I need to find a "good" design pattern to instanciate, and add
> > specific code all in one. Let me explain it :
>
> > I need to define "some" code, better be in a class, something like
>
> > class LinkA(object):
> > def mystuff(self):
> > <do something different>
>
> > class LinkB(object):
> > def mystuff(self):
> > <do something different again>
>
> > AND I need an instance of this class
> > { "stuff A": LinkA()
> > "stuff B": LinkB()
> > }
>
> > This kind of code "would" be fine, I mean, the result effect in memory
> > is fine for me.
> > But I don't like the way I have to
> > 1/ give a useless name to LinkA, linkB (there can be hundreds of names
> > like that)
> > 2/ I have to write it down two times (and that's one time too much)
>
> > any ideas ?
>
> > something like
> > [
> > new object():
> > def mystuff(self):
> > <do something>
> > ,
> > new object():
> > def mystuff(self):
> > <do something else>
> > ]
>
> > would be really perfect (but I know it does not work, or at least, I
> > don't know how to make it work)
>
> > In fact, I would like to define a class, and an instance in a single
> > statement
> >>> class Register:
>
> ... def __init__(self):
> ... self.items = []
> ... def __call__(self, method):
> ... class Link(object):
> ... mystuff = method
> ... self.items.append(Link())
> ...>>> register = Register()
> >>> @register
>
> ... def mystuff(self): print "first"
> ...>>> @register
>
> ... def mystuff(self): print "second"
> ...>>> for item in register.items:
>
> ... item.mystuff()
> ...
> first
> second
>
> Peter
hi,
I've tried something like this :
import inspect
class Test(object):
class Inner(object):
def mystuff(self):
print "hello stuff"
class InnerB(object):
def mystuff(self):
print "hello B"
def filter(member):
return inspect.isclass(member) and not member==Test.__class__
d = dict( (name, c()) for name, c in inspect.getmembers(Test,
filter ) )
print d
it works too, but I prefer your method
thanks
--
Eric
http://codeslash.blogspot.com
More information about the Python-list
mailing list