Encapsulation unpythonic?

Fabrice Pombet fp2161 at gmail.com
Sat Aug 31 04:00:28 EDT 2013


On Saturday, August 31, 2013 9:42:55 AM UTC+2, Fabrice Pombet wrote:
> On Saturday, August 31, 2013 9:03:58 AM UTC+2, Gary Herron wrote:
> 
> > On 08/30/2013 11:07 PM, Fabrice Pombet
> 
> >       wrote:
> 
> > 
> 
> >     
> 
> >     ... long discussion elided ...
> 
> > 
> 
> >       well, look at that:
> 
> > 
> 
> > a=(1,2)
> 
> > a=2+3 ->a is an object and I have changed its type and value from outside. As far as I am concerned this is one hell of an encapsulation violation... Could you do this -strictly speaking- in Java or C++?
> 
> > 
> 
> >     
> 
> >     
> 
> > 
> 
> >     Yes, in fact you can do that in C++ and java:
> 
> > 
> 
> >     
> 
> > 
> 
> >     Obj1 a = ...some object...;
> 
> > 
> 
> >     { // new scope...
> 
> > 
> 
> >        Obj2 a = ...another object...;
> 
> > 
> 
> >     }
> 
> > 
> 
> >     
> 
> > 
> 
> >     On one line, the name 'a' is bound to one object, and later it is
> 
> >     bound to another object.   Your Python code is similar, binding the
> 
> >     name 'a' to object (1,2) on one line and the object 5 on the next
> 
> >     line.  Granted, Python seems a little freer because, with it's
> 
> >     dynamic typing,  one doesn't need to create a new scope to rebind a
> 
> >     name, but all languages with variable names allow some control over
> 
> >     binding/rebinding names.
> 
> > 
> 
> >     
> 
> > 
> 
> >     But this has *nothing* at all to do with objects and encapsulation.
> 
> > 
> 
> >     
> 
> > 
> 
> >     Please don't confuse:
> 
> > 
> 
> >     the binding of names to objects and
> 
> > 
> 
> >       
> 
> > 
> 
> >       the existence of objects and their encapsulated behavior
> 
> > 
> 
> >     
> 
> >     They are very different things.
> 
> > 
> 
> >     
> 
> > 
> 
> >     -- 
> 
> > Dr. Gary Herron
> 
> > Department of Computer Science
> 
> > DigiPen Institute of Technology
> 
> > (425) 895-4418
> 
> 
> 
> That's interesting, can you do this in C++ or java:
> 
> 
> 
> class X():
    def __init__(self, *arg):
        for x in arg:
            self.x=x

and then:

a=X("x","y","z")
and then:
a.w="w" 
?

I guess my point was dynamic typing and encapsulation go a little in opposite directions in terms of philosophy, and it is therefore clear that Python privileges "dynamic typing" kind of thinking over encapsulation as a philosophical stance. Am I the only one thinking like this?



More information about the Python-list mailing list