2016-09-15 8 views
1
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) 

上記のコードは、私に次のエラーが表示されます。Pythonのデフォルトコンフィグレーションの再利用

 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_ROOT を見つけることが、それができないのはなぜ、これはDefaultConfigの値を再利用して構造化された構成を書きでの私の試みです。 ymlファイルを作成せずにこれを行う方法はありますか?

+1

@ŁukaszRogalski:これは実際にはMCVEです。 – user2357112

+0

@ user2357112うん、私は誤解し、質問を誤解した –

答えて

1

あなたは、任意の接頭辞なしでそれを使用する必要があります。

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 
2

DefaultConfigS3が作成された時点で定義されていないので、DefaultConfingを見つけることができません。

クラスはオブジェクトであることに注意してください。オブジェクトがあるため、インスタンス化する必要があります。 Pythonはその定義の終わりにクラスをインスタンス化し、それをグローバルに登録します。クラス定義が完了していないため、DefaultConfigという名前は使用できません。