在类之外的Python中访问名称受损名称的最佳方法

时间:2013-04-06 01:09:35

标签: python name-mangling

我想在Python中使用名称损坏的名称,以避免子类访问该属性。我知道我可以做_classname__attributename,但根据http://docs.python.org/2/reference/expressions.html#atom-identifiers,“如果转换的名称非常长(超过255个字符),则可能会发生实现定义的截断。如果类名只包含下划线,没有改变。“我特别担心“实施定义”部分。似乎也有一些微妙之处。是否有标准库函数将类名称和属性名称转换为其名称相当的名称?

背景

我想装饰一个类的docstring,以便能够说明它是否需要某些可选的外部依赖项,以便可以在doctest runner中自动启用或禁用它(https://github.com/sympy/sympy/pull/1969的完整详细信息)。

理想情况下,要执行此操作,您需要向docstring添加属性,但Python不允许向字符串添加属性。因此,您必须向类添加属性。我需要的是一个不由子类继承的属性,因为docstrings不是继承的。否则,子类的文档字符串将被错误地修饰。我原来的解决方案是使用一个描述符对象来禁用子类的属性,但是当名称修改已经存在时,这有点复杂,基本上已经这样做了,除了这一个细微之处。

0 个答案:

没有答案