¿Hay una función en la biblioteca estándar de Python para reproducir el esquema de creación de nombres de Python con un nombre de atributo "privado"? Parece que habría, pero no puedo encontrarlo por mi vida.Función de creación de nombres de Python
Escribí esto, pero si hay una mejor manera en que soy todo oídos.
def mangle_name (cls, attrname) :
prefix = '_' + cls.__name__.lstrip('_')
if not attrname.startswith('__') :
attrname = '__' + attrname
if not attrname.endswith('__') :
return prefix + attrname
else :
return attrname
class Foo :
__some_such = 3
name = mangle_name(Foo, '__some_such')
print name
print hasattr(Foo(), name)
Estoy bastante seguro de que no hay tal función en el biblioteca estándar. ¿Para qué lo necesitas? –
Me imagino que esto casi siempre va a usarse para hacer algo malo. –
Básicamente, necesito acceder dinámicamente a los atributos privados de una clase arbitraria. La función anterior funciona; sin embargo, puede haber problemas que desconozco (algún problema imprevisto). Entonces, usar la de otra persona parece ser la mejor opción. – rectangletangle