On Fri, Jan 15, 2010 at 3:43 PM, Guilherme P. de Freitas <guilhe...@gpfreitas.com> wrote: > Ok, I checked the answers you all gave me, and the suggestions seem to be 2: > > a. Compute the list of members on the fly, with a list comprehension > that looks up stuff on self.__dict___; > > b. Stay with my solution, but substituting the unnecessary "if-else" > by a simple "if". In sum, maintain a list of members that is updated > whenever a member is added or removed. > > Which one is better? I am new to all this, so please correct me if I > am wrong. It seems that (a) is better if you do a lot of > adding/removing members operations compared to the number of lookups > to the "members" list. Otherwise, (b) is better. Right?
Personally (b) feels more direct and robust. There is no guarantee that attributes are stored in self.__dict__, they can be in __slots__ or delegated to some other container. For example, here is a class with no __dict__: In [1]: class Foo(object): ...: __slots__ = ['bar'] ...: def __setattr__(self, name, value): ...: print 'set', name, 'to', value ...: object.__setattr__(self, name, value) In [2]: f=Foo() In [3]: f.bar = 'baz' set bar to baz In [4]: f.__dict__ --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) C:\Project\(misc)\MangoDB\<ipython console> in <module>() AttributeError: 'Foo' object has no attribute '__dict__' Granted if you have control over all the classes this won't happen but still...relying on __dict__ makes me nervous. Kent _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor