jueves, 4 de septiembre de 2014

Lo malo de python: Name mangling


Estoy leyendo un poco sobre Python y la verdad me parece bastante horrendo la forma en que implementa la programación orientada a objeto.

Respeto mucho las diferentes formas de pensar pero a mi forma de ver la programación la herencia multiple tiene más desventajas que ventajas y Python utiliza esta técnica.

Otro punto que no me parece beneficioso es el name mangling, esta técnica es una técnica utilizada para resolver diversos problemas causados ​​por la necesidad de tener nombres únicos para las entidades de programación en muchos lenguajes de programación modernos.

Python transforma los nombres que comienzan con doble guion bajo en nombres de la clase más el nombre del método:

class Test(object):
    def __mangled_name(self):
        print("hola")
    def normal_name(self):
        pass

print dir(Test)

a:

['_Test__mangled_name',
'__doc__',
'__module__',
'normal_name']

Esto lo hace para que el método sea privado, y no se pueda acceder, pero en realidad se puede acceder con otro nombre.

>>> t = Test()
>>> t.__mangled_name()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Test' object has no attribute '__mangled_name'
>>> t._Test__mangled_name()
hola

Por lo tanto los métodos privados son un espejismo :(