On Sat, 20 Mar 2010 22:15:54 +0000, kj wrote: > I need to create a class solely for the purpose of encapsulating a large > number of disparate data items.
There's a built-in for that. It's called "dict". Syntax for item access is a tiny bit different, but still very common: data['foo'] instead of data.foo If you need to customize item access, you need to modify __getitem__, __setitem__ and __delitem__ instead of __getattr__ etc., but otherwise they are nearly identical. Ignoring a few complications due to slots and inheritance, attribute access is built on top of item access, so you won't notice any performance hit (and you might see a tiny performance benefit). > At the moment I have no plans for any > methods for this class other than the bazillion accessors required to > access these various instance variables. Huh? If you have instance variables, why don't you refer to them by name? x = MyClass() # create an instance y = MyClass() # another variable bound to an instance z = MyClass() # etc. print x, y, z > (In case it matters, this class > is meant to be a private helper class internal to a module, and it won't > be subclassed.) > > What is "best practice" for implementing this sort of class *succinctly* > (i.e. without a lot of repetitive accessor code)? Leave the repetitive accessor code out. Python isn't Java. http://dirtsimple.org/2004/12/python-is-not-java.html > Also, one more question concerning syntax. Suppose that i represents an > instance of this class. Is it possible to define the class to support > this syntax > > val = i.field > i.field += 6 Classes already support that. >>> class C(object): ... pass ... >>> i = C() >>> i.field = 42 >>> val = i.field >>> i.field += 6 >>> print (val, i.field) 42 48 > ...rather than this one > > val = i.get_field() > i.set_field(i.get_field() + 6) > > ? Good grief! No wonder Java coders are so unproductive :( -- Steven -- http://mail.python.org/mailman/listinfo/python-list