Czy w bibliotece standardowej Pythona znajduje się funkcja do odtworzenia schematu mieszania nazw Pythona z "prywatną" nazwą atrybutu? Wygląda na to, że będzie, ale nie mogę go znaleźć dla mojego życia.Funkcja wymazywania nazw w języku Python
Napisałem to, ale jeśli jest lepszy sposób, jestem uszy.
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)
Jestem całkiem pewien, że nie ma takiej funkcji w standardowa biblioteka. Do czego ci to potrzebne? –
Mogę sobie wyobrazić, że to prawie zawsze będzie używane do robienia czegoś złego. –
Zasadniczo potrzebuję dynamicznego dostępu do prywatnych atrybutów dowolnej klasy. Powyższa funkcja działa; jednak mogą istnieć problemy, których nie jestem świadomy (niektóre nieprzewidziane problemy). Używanie kogoś innego wydaje się najlepszą opcją. – rectangletangle