On 01/30/2011 11:53 PM, Robert Park wrote:

[...] but now that the other classes are in other files,
the module _itself_ is providing the same encapsulation that the class
was giving me, and is thus redundant.


In this perspective, you are using classes as mere namespaces of your functions and variables. As I said, if you do not exploit hierarchies and relations (and you don't as you have no inheritance and no polymorphism) there is very little difference between module and class levels (IMO there are some disadvantages with modules, see below).

My point with that example was not that the second version was better,
but that they were so similar that it proves that the module itself is
"good enough" and that I don't actually benefit from having this
particular class inside a module.


If you don't see advantages with classes, let's stay with benefits of having only modules. Do you see any that are not syntactic like number of dots between IDs and 'self' appearing as first formal param?

Indeed if your application code fits into a thousand of LOC, you can
choose whatever style you like, either having everything pushed into one
module or split into classes/packages/modules, no really matters.

Ok, but I am not arguing against all classes, just the class that
represents the graphical interface that the user interacts with.


Then I guess your GUI is necessarily very small. I cannot imagine a large GUI all fitted into a module, and even within one single class. How do you separate the GUI logics and the presentation layers? Can you split the GUI into (interconnected, still decoupled) pieces? ( someone calls them components.) If you have components, you can reuse/factorize code in different parts of a single application, or you can rearrange the GUI for another application.

have a handful of classes that represent various kinds of data that my
application uses, and that makes great sense because each class can be
instantiated multiple times and each instance represents something
meaningful.


Typically the top-level logics, controller and presentation of the GUI is instantiated only once, but this does not mean that it is not meaningful. Again, classes are not supposed to be instantiated multiple times.

However, if your application is intended to grow up, if you need
contracts (interfaces) to agree with other programmers, if you need to

Ok, but how does having module top-level functions instead of class
instance methods (for a class that can only be instantiated once) make
any difference?


In principle no, in practice it largely helps. I think it is trivial to say that the introduction of OOP did not change the software, as you can do whatever with a procedural-paradigm, as well as you can do OOP with a non-OOP language. OOPs is only for reducing (hopefully) costs of software.

Can you explain how module-globals make code less portable? Is there a
platform on which Python doesn't support module globals? I'm genuinely
curious.


Mmm, 'portability' was a bad term I chose, as it can create misunderstandings I am sorry about that. I probably had to talk about 'reuse'. Extending my objections, what if you wanted to have:
- threads involved
- unittests of some parts
- code generated by metaclasses at compile time
- refactoring needs, e.g. you want to move your code (or part of it) in a different possibly larger place.

If you have poor locality of your code, you'll get into troubles. Using module-level variables does not help with locality.

My two cents,
r.

_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to