I stumbled on mangling by accident - I put two underscores instead of one in a class function name - but have found it to be quite useful. For example, I have various objects that need some air traffic control between them so I can call their parent objects with the same function, i.e. parentobject.__remove()
. It's not much different to use parentobject._remove_myclass()
but I kinda like the mangling!
Mangling seems designed to protect parent class objects from being overridden so is exploiting this a) "pythonic" and more importantly b) reliable/a good idea?
class myClass():
def __mc_func(self):
print ('Hello!')
def _yetAnotherClass__mc_func(self):
print ('Mangled from yetAnotherClass!')
def new_otherClass(self):
return otherClass(self)
def new_yetAnotherClass(self):
return yetAnotherClass(self)
class otherClass():
def __init__(self, myClass_instance):
self.mci = myClass_instance
def func(self):
self.mci.__mc_func()
class yetAnotherClass():
def __init__(self, myClass_instance):
self.mci = myClass_instance
def func(self):
self.mci.__mc_func()
g = myClass()
h = g.new_otherClass()
try:
h.func()
except AttributeError as e:
print (e)
#'myClass' object has no attribute '_otherClass__mc_func'
j = g.new_yetAnotherClass()
j.func()
#Mangled from yetAnotherClass!