python:在动态创建的类中进行名称修改

标签 python python-3.x name-mangling dynamic-class-creation

我想做这样的事情

def make_class(name : str)->type:
    class Ret:
       __name__ = name
       def __init__(self):
           self.__x = 0
    return Ret

A = make_class('A')
a = A()
assert a._A__x == 0

基本上,我想要的是创建一个类型,以便它根据动态标识符破坏其成员,但上面的示例不起作用。元类也没有。

我能想到的唯一解决方案是:

执行整个类定义

exec("""
class {}:
    def __init__(self):
        self.__x = 0
""".format(name))

或者通过getattr设置属性

class Ret:
    def __init__(self):
        setattr(self,'_'+name+"__x",0)

但是由于种种原因两者都没有吸引力,有没有正确的方法呢?

最佳答案

Python 名称修改基本上是静态的。它在字节码编译时执行,在函数的 name 参数可用之前。要动态调用此机制,您必须动态编译代码,这意味着您必须使用 exec 或类似的东西。

关于python:在动态创建的类中进行名称修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394083/

相关文章:

c++ - 静态对象的名称管理

c++ - C++中的名称修饰或名称修饰

python - 在 __str__ 上调用 __init__ 会导致 aenum.Enum

python - 使用python同时运行多个.exe文件

python - 为新样式 ipython (v5) 提示添加颜色

Python For 循环 : Optimize speed of code when replacing cat code with original values

python - 类名作为python中的变量

python - "equivalent"永不匹配的正则表达式的时间完全不同?

Python 正则表达式错误 : nothing to repeat at position 0

Python:动态类生成:覆盖成员