OHL*_*ÁLÁ 3 python setattr getattr
我想修改一个对象私有变量
class Example():
__myTest1 = 1
__myTest2 = 1
def __init__(self):
pass
def modifyTest(self, name = 'Test1', value):
setattr(self, '__my'+name, value);
Run Code Online (Sandbox Code Playgroud)
我尝试了上面的代码,似乎无法达到私有变量,
AttributeError: Example instance has no attribute '__myTest1'
Run Code Online (Sandbox Code Playgroud)
有没有办法修改私有变量?
从外面进入:
e = Example()
e._Example__myTest1 # 1
Run Code Online (Sandbox Code Playgroud)
由于私有变量名称修改规则.
但是,如果您需要访问私人成员,则表明您的设计存在问题.
如果您需要从类本身访问或更新它:
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)
Run Code Online (Sandbox Code Playgroud)
必须这样做,因为它是一个私有类 - 静态变量而不是私有实例变量(在这种情况下,它将是直截了当的)