Another newbie question
steve at holdenweb.com
Sun Dec 11 11:38:26 CET 2005
Paul Rubin wrote:
> Steven D'Aprano <steve at REMOVETHIScyber.com.au> writes:
>>The fact that sys is a module and not a class is a red herring. If the
>>"Law" of Demeter makes sense for classes, it makes just as much sense for
>>modules as well -- it is about reducing coupling between pieces of code,
>>not something specific to classes.
> I don't see that. If a source line refers to some module you can get
> instantly to the module's code. But you can't tell where any given
> class instance comes from. That's one of the usual criticisms of OOP,
> that the flow of control is obscured compared with pure procedural
>>One dot good, two dots bad.
> Easy to fix. Instead of sys.stdout.write(...) say
> from sys import stdout
> from then on you can use stdout.write(...) instead of sys.stdout.write.
The fact that you are prepared to argue for one of two mechanisms rather
than the other based simply on the syntax of two semantically equivalent
references is unworthy of someone who knows as much about programming as
you appear to do.
The "Law" of Demeter isn't about *how* you access objects, it's about
what interfaces to objects you can "legally" manipulate without undue
instability across refactoring. In other words, it's about semantics,
not syntax. And it's led a lot of Java programmers down a path that
makes their programs less, not more, readable.
Python's ability to let the programmer decide how much encapsulation is
worthwhile is one of its beauties, not a wart.
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC www.holdenweb.com
PyCon TX 2006 www.python.org/pycon/
More information about the Python-list