【问题标题】:Python: Finding the name of a enum classPython:查找枚举类的名称
【发布时间】:2018-08-06 17:40:29
【问题描述】:

给定以下python代码:

class Random_Skew_Enum( Enum ):
    NO_SKEW      = 0
    SKEW_LEFT_01 = 1
    SKEW_LEFT_02 = 2
    SKEW_LEFT_03 = 3
    SKEW_LEFT_04 = 4
    SKEW_LEFT_05 = 5
    SKEW_LEFT_06 = 6
    SKEW_RIGHT_01 = 7
    SKEW_RIGHT_02 = 8
    SKEW_RIGHT_03 = 9
    SKEW_RIGHT_04 = 10
    SKEW_RIGHT_05 = 11
    SKEW_RIGHT_06 = 12

    def _Convert ( self, enumeration ):

        text_to_enumeration = {}
        enumeration_name = ""

        def Do_Convert( self, value ):

            result = text_to_enumeration.get( value )
            if result is None:
                raise CCS_Enumeration_Error( "The enumeration '{0:s}' does not contain the value '{1:s}.".format( enumeration_name, value ) )
            return result

        enumeration_name = enumerate.name
        for enumerate in enumeration:
            match_data = self._split_enumeration.search( enumerate_name )
            new_key = match_data.group( 3 ).upper().strip()
            text_to_enumeration.update( dict( [ new_key, enumerate ] ))
        return Do_Convert

如果我再编码:

_Convert_Text_To_Random_Skew = self._Convert ( Random_Skew_Enum )

线

enumeration_name = enumerate.name

产生异常,我尝试了其他方法从参数枚举中提取类名但没有效果,有人可以帮忙吗?

【问题讨论】:

  • enumerate 不是 enumeration (通常这是一个糟糕的名称选择,因为内置的 enumerate 函数在该名称上具有 dibs)。
  • Random_Skew_Enum['SKEW_LEFT_04'] is Random_Skew_Enum.SKEW_LEFT_04

标签: python class enums


【解决方案1】:

访问对象名称的正确属性(如果有)是__name__

如果您需要类名,则需要type(enumerate).__name__(如果您使用的是旧式类,则需要enumerate.__class__.__name__)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多