Я хотел бы использовать Python's enum для создания значения в своем собственном пространстве имен.Специализированное перечисление пространства имен
Вот основная идея:
from enum import Enum
class MyBaseNs(Enum):
__namespace__ = 'base'
a = 'a'
b = 'b'
class MyChildNs(MyBaseNs):
__namespace__ = 'child'
a = 'a'
b = 'b'
Затем каждый участник должен напечатать следующее:
>>> MyBaseNs.a.value
'base.a'
>>> MyBaseNs.b.value
'base.b'
>>> MyChildNs.a.value
'base.child.a'
>>> MyChildNs.a.value
'base.child.b'
Idealy, я хотел бы значение, которое будет принято непосредственно от имени элемента, так что я избегайте повторения, например, для примера Autoumber class.
И бонус будет иметь возможность сделать что-то вроде:
>>> MyBaseNs.child.a.value
'base.child.a'
Я начал играть с методом __new__()
, но имеющие трудное время, чтобы достичь ожидаемого результата.
На данный момент у меня есть следующие:
from enum import Enum
class MyNs(str, Enum):
__sep__ = '.'
def __new__(cls, value):
obj = str.__new__(cls)
obj._value_ = cls.__sep__.join(cls.__namespace__ + (str(value),))
return obj
class A(MyNs):
__namespace__ = ('a',)
a = 'a'
Так это сделать str
специализированную Enum
и присоединиться к __namespace__
кортеж с каждым значением члена. Итак, это основа того, что я ищу.
Решение подразумевает запуск всех родителей текущего пространства имен для создания окончательного кортежа __namespace__
. Я пока не вижу, как это можно сделать.
Как реализовать такое поведение? Enum
действительно хороший способ пойти?
* «С трудом» * не является полезным описанием проблемы; пожалуйста, дайте [mcve]. – jonrsharpe