python默认配置变量重用

2024-04-25 20:07:39 发布

您现在位置:Python中文网/ 问答频道 /正文

class DefaultConfig(object):
    class S3(object):
        DATA_ROOT = 's3://%(bucket_name)s/NAS'
        DATA_LOCATION = '{}/%(instrument_id)s/%(run_id)s'.format(DefaultConfig.S3.DATA_ROOT)

上面的代码给出了以下错误。你知道吗

      File "./s3Utils.py", line 5, in <module>
    from InfraConfig import InfraConfig as IC
  File "/opt/src/datasource/src/main/python/util/InfraConfig.py", line 4, in <module>
    class DefaultConfig(object):
  File "/opt/src/datasource/src/main/python/util/InfraConfig.py", line 6, in DefaultConfig
    class S3(object):
  File "/opt/src/datasource/src/main/python/util/InfraConfig.py", line 14, in S3
    DATA_LOCATION = '{}/%(instrument_id)s/%(run_id)s'.format(DefaultConfig.S3.DATA_ROOT)
NameError: name 'DefaultConfig' is not defined

为什么找不到DefaultConfig.S3.DATA\u根 另外,这是我在使用DefaultConfig的值来编写结构化配置的尝试。有没有不写yml文件的方法?你知道吗


Tags: inpysrciddataobjects3line
2条回答

您应该不使用任何前缀:

class DefaultConfig(object):
  class S3(object):
    DATA_ROOT = 's3://%(bucket_name)s/NAS'
    DATA_LOCATION = '{}/%(instrument_id)s/%(run_id)s'.format(DATA_ROOT)

 print DefaultConfig.S3.DATA_LOCATION

退货:

> s3://%(bucket_name)s/NAS/%(instrument_id)s/%(run_id)s

它无法找到DefaultConfing,因为在创建S3时没有定义DefaultConfig。你知道吗

记住类是对象。因为存在对象,这意味着它们需要实例化。Python在类的定义末尾实例化一个类,并因此在globals中注册它。因为类定义尚未完成,所以不能使用DefaultConfig名称。你知道吗

相关问题 更多 >