How can I reach a private variable within the object
Pergunta
I would like to modify an object private variable
class Example():
__myTest1 = 1
__myTest2 = 1
def __init__(self):
pass
def modifyTest(self, name = 'Test1', value):
setattr(self, '__my'+name, value);
I tried the code above and it's seems that not possible to reach a private variable,
AttributeError: Example instance has no attribute '__myTest1'
Is there any way to modify a private variable?
Solução
Accessing from outside:
e = Example()
e._Example__myTest1 # 1
Due to private variable name mangling rules.
But if you need to access private members, it is an indication of something wrong in your design.
If you need to access or update it from within the class itself:
class Example():
__myTest1 = 1
__myTest2 = 1
def __init__(self):
pass
@classmethod
def modifyTest(cls, value, name="Test1"):
setattr(cls, '_%s__my%s' % (cls.__name__, name), value)
This must be done because it is a private class-static variable and not a private instance variable (in which case it would be straightforward)
Outras dicas
Try adding a single underscore and the class name to the beginning of the variable.
def modifyTest(name = 'Test1', value):
setattr(self, '_Example__my' + name, value)
class Example():
__myTest1 = 1
__myTest2 = 1
def __init__(self):
pass
def modifyTest(self, name, value):
setattr(self, '__my'+name, value)
Optional variables must come after mandatory variables.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow