3

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?

4

3 回答 3

6

从外部访问:

e = Example()
e._Example__myTest1   # 1

由于私有变量名称修改规则

但是,如果您需要访问私有成员,则表明您的设计有问题。

如果您需要从类本身访问或更新它:

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)

必须这样做,因为它是私有类静态变量而不是私有实例变量(在这种情况下它会很简单)

于 2012-04-03T09:26:57.800 回答
1

尝试在变量的开头添加一个下划线和类名。

def modifyTest(name = 'Test1', value):
    setattr(self, '_Example__my' + name, value)
于 2012-04-03T09:32:03.853 回答
0
class Example():
    __myTest1 = 1
    __myTest2 = 1
    def __init__(self):
        pass
    def modifyTest(self, name, value):
        setattr(self, '__my'+name, value)

可选变量必须在强制变量之后。

于 2012-04-03T09:28:11.437 回答