ярлык.
ка Этот вопрос не о Питоне 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)