Por que devo usar o método __prepare__ para obter o namespace de uma classe?

Nota Esta pergunta não é sobre o Python 3Enum tipo de dados, é apenas o exemplo que estou usando.

ComPEP 3115 Python 3 adicionou o__prepare__1 método paratype com o objetivo de permitir que um espaço para nome personalizado seja usado ao criar classes. Por exemplo, o novoEnum tipo de dados usa__prepare__ para retornar uma instância do private_EnumDict para uso como o novoEnum namespace da classe.

$12 tipo de dados, é apenas o exemplo que estou usando.13$EnumMeta sendo subclassificado, criando um novo espaço para nome da classe na metaclasse__new__ método, mas em vez de chamar o__prepare__ método para adquirir esse novo espaço para nome,type(clsdict)() é usado em seu lugar. Existe algum risco em fazê-lo dessa maneira?

1 A assinatura para__prepare__:

@classmethod
def __prepare__(metacls, cls, bases, **kwds):

e para__new__:

def __new__(metacls, cls, bases, clsdict, **kwds):

2 Exemplo usandotype(clsdict):

deesta resposta

class CountryCodeMeta(enum.EnumMeta):
    def __new__(metacls, cls, bases, classdict):
        data = classdict['data']
        names = [(country['alpha-2'], int(country['country-code'])) for country in data]

  -->   temp = type(classdict)()
        for name, value in names:
            temp[name] = value

        excluded = set(temp) | set(('data',))
        temp.update(item for item in classdict.items() if item[0] not in excluded)

        return super(CountryCodeMeta, metacls).__new__(metacls, cls, bases, temp)

questionAnswers(1)

yourAnswerToTheQuestion