"spir" <denis.s...@free.fr> wrote
Any time you have a class that just has an __init__ it means its not doing anything. And that's a bad sign. Classes are there to *do* things not just store data. We can use a tuple or dictionary to do that.

While this is probably true for _single_ objects in most case, I guess it really makes sense to create a common structure for object collections.

I'd say that's valid for a very small number of cases which would normally be addressed using a record in Pascal or struct in C/C++. Mainly for the advantage of self documenting data. But a dictionary can do that too, albeit you need to specify the field names on construction.

But in the vast majority of such cases I'd still use a tuple.
Where it gets more valid is where we have deeply nested data structures. But then, I've never seen such a structure that didn't have methods too. And then it becomes a valid class...

Position, with x & y attributes, for a very simple case.

I'd use a tuple here even if p[0] is slightly less readable than p.x

But indeed there are complex ones, possibly with nested structures such as eg Point inlcluding position, color,...

In that case there will almost always be associated methods to be created. Even a "simple" x,y point often has comparison methods or draw() or move()...

In addition, doing this helps readibility by clearly exposing the object (type) structure in a single & visible place.

The visibility and naming aspect referred to above is the most valid reasopn I can think of for using a non behavioural class. But in most cases, non behavioural classes quickly become behavioural! After all what is the point(sic) of data if you don't do something to it?

All of this applies both to "value" objects (pure information, such as a position) and "real" objects (distinct things, such as a point). What do you think?

I think that you have a valid point but that "pure value" objects occur far less often than you might think. I always treat a value object as a sign that I've probably put some processing code in the wrong place! Only when I've checked and convinced myself I'm wrong would I proceed.

For example, what do we do with the values?
Do we print them? Then maybe we should have a __str__  method?
Do we save them in a file? Then maybe we need a save() method?
Do we do some calculations? Maybe we should have a calculate() method?
Do we draw them... well, I'm sure you get the idea :-)

--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to