Я хочу сделать что-то вроде этого
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)
но оба они непривлекательны по разным причинам, есть ли правильный способ сделать это?