sed*_*idw 8 python class constants python-2.7
我有一个类,主要用于定义其他类的公共常量.它看起来像下面这样:
class CommonNames(object):
C1 = 'c1'
C2 = 'c2'
C3 = 'c3'
Run Code Online (Sandbox Code Playgroud)
我希望"pythonically"获得所有常量值.如果我使用CommonNames.__dict__.values()我得到那些值('c1'等等),但我得到其他的东西,如:
[<attribute '__dict__' of 'CommonNames' objects>,
<attribute '__weakref__' of 'CommonNames' objects>,
None]
Run Code Online (Sandbox Code Playgroud)
我不想要的.
我希望能够获取所有值,因为此代码将在以后更改,我希望其他地方了解这些更改.
Mar*_*ers 14
您必须通过过滤名称来明确过滤掉这些内容:
[value for name, value in vars(CommonNames).iteritems() if not name.startswith('_')]
Run Code Online (Sandbox Code Playgroud)
这会生成任何不以下划线开头的名称的值列表:
>>> class CommonNames(object):
... C1 = 'c1'
... C2 = 'c2'
... C3 = 'c3'
...
>>> [value for name, value in vars(CommonNames).iteritems() if not name.startswith('_')]
['c3', 'c2', 'c1']
Run Code Online (Sandbox Code Playgroud)
对于像这样的枚举,你最好使用添加到Python 3.4 的新库的enum34backport:enum
from enum import Enum
class CommonNames(Enum):
C1 = 'c1'
C2 = 'c2'
C3 = 'c3'
values = [e.value for e in CommonNames]
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您尝试在 python3 中使用 Martijn 示例,则应该使用 items() 而不是 iteritmes(),因为它已被弃用
[value for name, value in vars(CommonNames).items() if not name.startswith('_')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3792 次 |
| 最近记录: |