|
Prev: re.search much slower then grep on some regular expressions
Next: win32com.client (Howto edit Contacts in Outlook)
From: Thomas Troeger on 4 Jul 2008 07:48 Hello, I have a class that looks like this: class A(object): def __init__(self, a=0, b=1): self.a, self.b=a, b def __str__(self): return "%s(%d,%d)" % (type(a).__name__, self.a, self.b) I want to have a list of such classes instantiated automatically on startup of my program. My current (most probably clumsy) implementation looks like this: bla=[A(x[0], x[1]) for x in ((1, 2), (3, 4))] giving the following: >>> map(str, bla) ['A(1,2)', 'A(3,4)'] Is there a better way to construct a list of such classes? Basically what I want is something similar to the following C example: struct { int a; int b; } bla[]={ {1, 2}, {3, 4} }; Regards, T.
From: Bruno Desthuilliers on 4 Jul 2008 08:26 Thomas Troeger a �crit : > Hello, > > I have a class that looks like this: > > class A(object): > def __init__(self, a=0, b=1): > self.a, self.b=a, b > > def __str__(self): > return "%s(%d,%d)" % (type(a).__name__, self.a, self.b) Given the output example you give, I assume there's a typo here and you meant: return "%s(%d,%d)" % (type(self).__name__, self.a, self.b) > I want to have a list of such classes instantiated automatically on > startup of my program. My current (most probably clumsy) implementation > looks like this: > > bla=[A(x[0], x[1]) for x in ((1, 2), (3, 4))] Not clumsy at all, and almost perfectly pythonic. The only improvment I can think of is: bla = [A(*args) for args in ((1,2), (3,4))] > giving the following: > > >>> map(str, bla) > ['A(1,2)', 'A(3,4)'] > > Is there a better way to construct a list of such classes? Note that it's not a list of classes, but a list of instances of A. But given your specs, nope, your approach is the right one. > Basically > what I want is something similar to the following C example: > > struct { > int a; > int b; > } bla[]={ {1, 2}, {3, 4} }; Basically (no pun intended[1]), Python is not C. Trying to write C in Python will only buy you pain and frustration (and this can be generalized for any combination of two languages for any known programming language). [1] well... in fact, yes... !-)
From: Thomas Troeger on 4 Jul 2008 08:59 Bruno Desthuilliers wrote: > return "%s(%d,%d)" % (type(self).__name__, self.a, self.b) Er, yes exactly! I noticed it a few seconds after I had sent the message ;-( >> I want to have a list of such classes instantiated automatically on Of course I meant class instances ... sorry :) It's always good to have an example to compensate for English errors *g*. > bla = [A(*args) for args in ((1,2), (3,4))] .... > Note that it's not a list of classes, but a list of instances of A. But > given your specs, nope, your approach is the right one. Ah I knew there was something and I couldn't find it in the docs anymore! Now my potential follow-up question is answered as well, namely how I can instantiate with variable argument lists, like this: >>> bla = [A(*args) for args in ((), (1,), (1, 2))] >>> map(str, bla) ['A(0,1)', 'A(1,1)', 'A(1,2)'] > Basically (no pun intended[1]), Python is not C. Trying to write C in > Python will only buy you pain and frustration (and this can be > generalized for any combination of two languages for any known > programming language). Hehe. I am trying to develop a program prototype in python because of it's repaid prototyping properties, and once it's working I will port it to C, because of speed issues and the fact that it's running on an embedded machine without space for a python interpreter. I have like 4 Megs left, but until now noone has answered my question how I can cut down a standard python installation so that it fit's into 4 megs. Thanks for your quick answer :) T.
From: Marc 'BlackJack' Rintsch on 4 Jul 2008 09:13
On Fri, 04 Jul 2008 14:59:05 +0200, Thomas Troeger wrote: > Bruno Desthuilliers wrote: >>> I want to have a list of such classes instantiated automatically on > > Of course I meant class instances ... sorry :) It's always good to have > an example to compensate for English errors *g*. Well, "class instances" is still a little bit ambiguous in a language where classes are objects too. ;-) > Ah I knew there was something and I couldn't find it in the docs > anymore! Now my potential follow-up question is answered as well, namely > how I can instantiate with variable argument lists, like this: > > >>> bla = [A(*args) for args in ((), (1,), (1, 2))] > >>> map(str, bla) > ['A(0,1)', 'A(1,1)', 'A(1,2)'] Looks like you want default values for the arguments of `A.__init__()`. Ciao, Marc 'BlackJack' Rintsch |