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

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to