Python:我怎样才能在使用特殊方法的损坏变量中解除锁定? 在Python中,通过定义一个特殊的方法,可以使用一个特殊的方法来实现类似于C++中操作符重载的一些方法。我见过一些编码人员使用这个方法创建一个只读锁,使用一个损坏的变量名。这非常聪明,直到我需要将一个元素添加到锁定类的数组中。例如只需设置exampleArray.\u ReadOnly\uuuu locked=False就可以很容易地解决这一问题,除非这也被uuu setattr\uuuu特殊方法捕获并导致错误

Python:我怎样才能在使用特殊方法的损坏变量中解除锁定? 在Python中,通过定义一个特殊的方法,可以使用一个特殊的方法来实现类似于C++中操作符重载的一些方法。我见过一些编码人员使用这个方法创建一个只读锁,使用一个损坏的变量名。这非常聪明,直到我需要将一个元素添加到锁定类的数组中。例如只需设置exampleArray.\u ReadOnly\uuuu locked=False就可以很容易地解决这一问题,除非这也被uuu setattr\uuuu特殊方法捕获并导致错误,python,class,name-mangling,Python,Class,Name Mangling,“ipa:错误:AttributeError:锁定:无法设置命名空间。\u只读\u锁定为False” 是否有一种简单而聪明的方法将其设置回读写模式,以便我可以将值插入数组?如docstring中所述,您可以使用对象的setattr\uuuuuu的默认实现 class ReadOnly(object): def __setattr__(self, name, value): raise AttributeError("This instance is read only."

“ipa:错误:AttributeError:锁定:无法设置命名空间。\u只读\u锁定为False”


是否有一种简单而聪明的方法将其设置回读写模式,以便我可以将值插入数组?

如docstring中所述,您可以使用
对象的
setattr\uuuuuu
的默认实现

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'

这里潜在的问题是当父类在设置对象时执行一些特殊操作时。在这种情况下,您得到的实例可能不一致。

您是否考虑过FreeIPA的作者可能有一个很好的理由让您想做的事情变得困难?是的。但我想打败它也有一个很好的理由。该项目还提供了一个注释,如果你想(比如)在条目中添加注释,你会很快进入只读锁。
ReadOnly
docstring实际上向你展示了如何绕过它的保护。