ярлык.

ка Этот вопрос не о Питоне 3Enum Тип данных, это просто пример, который я использую.

СОПТОСОЗ 3115 Python 3 добавил__prepare__1 метод дляtype с целью разрешения использования пространства имен при создании классов. Например, новыйEnum тип данных использует__prepare__ вернуть экземпляр частного_EnumDict для использования в качестве новогоEnum пространство имен класса.

Тем не менее, я видел несколько примеров на SO2 изEnumMeta будучи разделенным на подклассы, создает новое пространство имен для класса в метаклассе__new__ метод, но вместо вызова__prepare__ метод, чтобы получить это новое пространство имен,type(clsdict)() используется вместо Есть ли риск сделать это таким образом?

1 Подпись для__prepare__:

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

и для__new__:

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

2 Пример использованияtype(clsdict):

отэтот ответ

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)

Ответы на вопрос(1)

Ваш ответ на вопрос