[Tutor] list of instance objects, access attribute

Vincent Davis vincent at vincentdavis.net
Sat Jun 20 07:04:13 CEST 2009


Thanks to all for the comments, It was much more than I expected.

Vincent


On Fri, Jun 19, 2009 at 4:30 PM, Lie Ryan<lie.1296 at gmail.com> wrote:
> Alan Gauld wrote:
>>
>> "Vincent Davis" <vincent at vincentdavis.net> wrote
>>
>> class B():
>>  def __init__(self, b1, b2):
>>     self.fooa = b1
>>     self.foob = b2
>>
>> I assume thats what you really meant!
>>
>> Ok now I have several instances in a list
>> b1 = B(1, 2)
>> b2 = B(3, 4)
>> b3 = B(9, 10)
>> alist = [b1, b2, b3]
>>
>>> Lets say for each instance of the class I want to print the value of
>>> fooa if it is greater than 5. How do I do this,
>>
>> define a method of the class, say bigprint()
>>
>> def bigprint(self, limit=5):
>>     if self.fooa > limit: print self.fooa
>>
>>> about is how I iterate over the values of fooa.
>>
>> Iterate over the objects and call the method. Make the object do the
>> work, your code should not need to know about the internal attributes of
>> the object.
>>
>> For x in alist:
>>      x.bigprint()
>>
>>> Is that the right way or is there a better?
>>> will this work for methods?
>>
>> Methods are how you should do it. Direct access other than for simple
>> reading of values is a suspicious design smell. Any processing of or
>> rules about the data should be in a method.
>>
>>
>
> Personally, I often thought input/output inside an object is a design
> smell (except for debugging), preferring something like this:
>
> class B(object):
>    def __init__(...):
>        ...
>    def big(self, limit=5):
>        return (self.fooa > limit)
>
> alist = [...]
>
> for y in (x for x in alist if x.big()):
>    print y.fooa
>
> although admittably often it could make certain codes more difficult to
> write; and in some cases the practical approach would be warranted. This
> is especially true as the codebase gets larger.
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list