栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在python中订购枚举值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在python中订购枚举值

您的Enum在3个地方丢失了订单。首先,将类主体上的属性存储在字典中,然后将项目复制到另一个字典中。最后,您

values()
将返回第三个字典。字典不保存顺序,并且不可能在类主体中获得属性的顺序。

有了这个系统,最简单的就是拥有一个变量

__ordering__ = [ 'single', 'double' ]

并将

values()
返回值作为元组列表(如
dict.items()
)。

class Enummeta(type):    def __new__(typ, name, bases, attrs):        cls_attrs = {}        cls_choices = {}        for attr_name, value in attrs.items(): cls_attrs[attr_name] = attr_name.lower() if not attr_name.startswith("__"):     cls_choices[attr_name.lower()] = value        ordering = attrs.get('__ordering__')        if ordering == None: ordering = sorted(cls_choices.keys())        def choices(cls): return dict(cls_choices)        def values(cls, value=None): if value is None:     return [ (k, cls_choices[k] ) for k in ordering ] elif not isinstance(value, basestring):     return [ (k, cls_choices[k] ) for k in value ] else:     return unipre(cls_choices.get(value))        def keys(cls, nil=False): items = list(ordering) if nil:     items.append('') return items        def combined_length(cls): return len(",".join(cls.values().keys()))        def max_length(cls): return max(map(len, cls.values().keys()))        cls_attrs['choices'] = classmethod(choices)        cls_attrs['values'] = classmethod(values)        cls_attrs['keys'] = classmethod(keys)        cls_attrs['combined_length'] = classmethod(combined_length)        cls_attrs['max_length'] = classmethod(max_length)        return type(name, bases, cls_attrs)class SideHemType:    __ordering__ = ['double', 'single']    __metaclass__ = Enummeta    Single = "Single side hem for opaque fabrics"    Double = "Double side hem for transparent fabrics"print SideHemType.keys()print SideHemType.values()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646234.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号