Gibt es eine Funktion in der Python-Standardbibliothek, Python-Name Mangling-Schema mit einem "privaten" Attributnamen zu reproduzieren? Es scheint so als würde es sein, aber ich kann es nicht für mein Leben finden.Python-Name Mangling-Funktion
Ich schrieb dies, aber wenn es einen besseren Weg gibt, bin ich ganz Ohr.
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)
Ich bin mir ziemlich sicher, dass es keine solche Funktion in der Standardbibliothek. Wofür brauchst du es? –
Ich kann mir vorstellen, dass dies fast immer dazu verwendet wird, etwas Schlechtes zu tun. –
Grundsätzlich muss ich dynamisch auf die privaten Attribute einer beliebigen Klasse zugreifen. Die obige Funktion funktioniert; Allerdings kann es Probleme geben, die mir unbekannt sind (einige unvorhergesehene Probleme). Es scheint also die beste Option zu sein, jemand anderes zu benutzen. – rectangletangle