I want to do something like this
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)
但由于各种原因,它们都不太吸引人,有没有正确的方法来解决这个问题呢?
exec(...)
是实际实现namedtuple
的方式,因此... - juanpa.arrivillaga