获取 python 枚举 class 的名称
Getting the name of python enum class
假设我有一个这样的class
class ErrorCreatingObjectResult(enum.Enum):
NONE = 0
OBJECT_ALREADY_EXIST = 1
UID_NOT_REGESTIRE = 2
CREATOR_NOT_REGESTIRE = 3
以及具有此 class
属性的对象
class CreatingObjectMessage:
def __init__(self) -> None:
self.message = 'done creating object'
self.error = False
self.errorType = ErrorCreatingObjectResult.NONE
我想通过调用
从这个class生成dict对象
def convert2serialize(obj):
if isinstance(obj, dict):
return {k: convert2serialize(v) for k, v in obj.items()}
elif hasattr(obj, "_ast"):
return convert2serialize(obj._ast())
elif not isinstance(obj, str) and hasattr(obj, "__iter__"):
return [convert2serialize(v) for v in obj]
elif hasattr(obj, "__dict__"):
return {
k: convert2serialize(v)
for k, v in obj.__dict__.items()
if not callable(v) and not k.startswith('_')
}
else:
return obj
r = CreatingObjectMessage()
convert2serialize(r)
这给我一个空的结果
编辑 convert2serialize 函数修复了它
def convert2serialize(obj):
if isinstance(obj, enum.Enum):
return {type(obj).mro()[0].__name__: obj.name}
if isinstance(obj, dict):
return {k: convert2serialize(v) for k, v in obj.items()}
elif hasattr(obj, "_ast"):
return convert2serialize(obj._ast())
elif not isinstance(obj, str) and hasattr(obj, "__iter__"):
return [convert2serialize(v) for v in obj]
elif hasattr(obj, "__dict__"):
return {
k: convert2serialize(v)
for k, v in obj.__dict__.items()
if not callable(v) and not k.startswith('_')
}
else:
return obj
这是我可以获得 class
名称的部分
type(obj).mro()[0].__name__
获取枚举成员的 class 的名称非常简单:
member.__class__.__name__
假设我有一个这样的class
class ErrorCreatingObjectResult(enum.Enum):
NONE = 0
OBJECT_ALREADY_EXIST = 1
UID_NOT_REGESTIRE = 2
CREATOR_NOT_REGESTIRE = 3
以及具有此 class
属性的对象class CreatingObjectMessage:
def __init__(self) -> None:
self.message = 'done creating object'
self.error = False
self.errorType = ErrorCreatingObjectResult.NONE
我想通过调用
从这个class生成dict对象def convert2serialize(obj):
if isinstance(obj, dict):
return {k: convert2serialize(v) for k, v in obj.items()}
elif hasattr(obj, "_ast"):
return convert2serialize(obj._ast())
elif not isinstance(obj, str) and hasattr(obj, "__iter__"):
return [convert2serialize(v) for v in obj]
elif hasattr(obj, "__dict__"):
return {
k: convert2serialize(v)
for k, v in obj.__dict__.items()
if not callable(v) and not k.startswith('_')
}
else:
return obj
r = CreatingObjectMessage()
convert2serialize(r)
这给我一个空的结果
编辑 convert2serialize 函数修复了它
def convert2serialize(obj):
if isinstance(obj, enum.Enum):
return {type(obj).mro()[0].__name__: obj.name}
if isinstance(obj, dict):
return {k: convert2serialize(v) for k, v in obj.items()}
elif hasattr(obj, "_ast"):
return convert2serialize(obj._ast())
elif not isinstance(obj, str) and hasattr(obj, "__iter__"):
return [convert2serialize(v) for v in obj]
elif hasattr(obj, "__dict__"):
return {
k: convert2serialize(v)
for k, v in obj.__dict__.items()
if not callable(v) and not k.startswith('_')
}
else:
return obj
这是我可以获得 class
名称的部分type(obj).mro()[0].__name__
获取枚举成员的 class 的名称非常简单:
member.__class__.__name__