python - 如何从包含类定义的 .py 文件中获取属性名称

标签 python python-2.7

我得到的输入文件只包含一个类定义(类只是常量容器,包含 json 的键,类似的文件在 Java 客户端上用于解码 json)看起来像:

class Constants(object):

    VERSION= 'version'
    OS = 'os'
    PROGRAM = 'program'
    # more constants .....

如何获取常量中定义的所有属性的字典,如何将文件解析为字典? 我想压缩 key 并生成具有相同常量 key 但更短 key 的新 .py 和 .java 文件。

最佳答案

  1. 导入模块
    • 我用了imp.load_module在以下代码中代替 __import__ 来导入任意文件路径。
  2. 找到类对象。
  3. 使用 vars 迭代类属性:

import imp
path = '/path/to/file'
with open(path, 'U') as f:
    mod = imp.load_module('temporary', f, path, ('.py', 'U', imp.PY_SOURCE))

builtins = vars(__builtins__)
cls = next(value for name, value in vars(mod).items() if name not in builtins)
const_dict = {name: value for name, value in vars(mod.Constants).items()
                          if not name.startswith('_')}
print(const_dict)

# => {'OS': 'os', 'VERSION': 'version', 'PROGRAM': 'program'}

在 Python 2.7.6、3.3.2、3.4.0b2 上测试。

关于python - 如何从包含类定义的 .py 文件中获取属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21165103/

相关文章:

python - 如何使用 mongokit/pymongo 填充 wtform 选择字段?

python - tensorflow 错误: Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED

java - 在单行Python中进行多次赋值就像在Java中一样a=b=c?

Python 用空格分割字符串,除非 a\在前面

python-2.7 - 如何在 AppEngine for Python 中导入 BigQuery

python - 将文本文件中的项目添加到 pyQt5 中的 QlistWidget

python - QT 的奇怪 Python 线程问题

python - 如何测量我的 Web 应用程序的实际响应时间?

python - python2 和 python3 之间的舍入行为不同

python - 重新排序簇号以实现正确对应