繁体   English   中英

python:在动态创建的类中命名mangling

[英]python: name mangling in a dynamically created class

我想做这样的事情

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或类似的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM