Python: 如何破解使用特殊方法的损坏变量中的锁?

Python: How can I defeat a lock in mangled variable which uses a special method?

在python中,可以使用special methods to achieve something similar to operator overloading in C++ by defining a special method for __setattr__. I have seen some coders use this to create a read-only lock using a mangled variable name. That's pretty clever until I need to an element to an array of the locked class. For example, FreeIPA implements this。通过简单地设置 exampleArray._ReadOnly__locked = False 可以很容易地解决这个问题,除了这也会被 __setattr__ 特殊方法捕获并导致错误

"ipa: ERROR: AttributeError: locked: cannot set NameSpace._ReadOnly__locked to False"

有没有一种简单而巧妙的方法可以将其设置回读写模式,以便我可以将我的值插入到数组中?

如文档字符串中所述,您可以使用 object__setattr__ 的默认实现。

class ReadOnly(object):
    def __setattr__(self, name, value):
        raise AttributeError("This instance is read only.")

r = ReadOnly()
object.__setattr__(r, 'name', 'value')
print r.name # 'value'

这里的潜在问题是当您的 parent class 在设置 objects 时做了一些特殊的事情。在这种情况下,您生成的实例可能不一致。