Esiste una funzione nella libreria standard Python per riprodurre lo schema di mangling dei nomi di Python con un nome di attributo "privato"? Sembra che ci sarebbe, ma non riesco a trovarlo per la vita di me.Funzione di mangling nome Python
Ho scritto questo, ma se c'è un modo migliore sono tutto orecchie.
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)
Sono abbastanza sicuro che non v'è alcuna funzione nel libreria standard. A cosa ti serve? –
Posso immaginare che questo sarà quasi sempre usato per fare qualcosa di male. –
Fondamentalmente, ho bisogno di accedere in modo dinamico agli attributi privati di una classe arbitraria. La funzione sopra funziona; tuttavia, potrebbero esserci problemi di cui non sono a conoscenza (un problema non previsto). Quindi usare qualcun altro sembra l'opzione migliore. – rectangletangle