77347


# 概要

Clientクラスのインスタンス変数に環境変数 **API_KEY** 、 **SECRET_KEY** の値を代入したいという状況です。  
環境変数 **API_KEY** には`AAAAAAAA`という文字列、 **SECRET_KEY** には`BBBBBBBB`という文字列です。

しかし以下のコードを実行した結果、インスタンス変数には文字列ではなくタプルが代入されてしまいます。

# 疑問

  1. なぜ文字列でなくタプルが代入されてしまっているのか？
  2. 期待通りタプルではなく文字列をインスタンス変数に代入するためにはどのような変更を加えればよいですか？

# コード

[code]

    import os
    from dataclasses import dataclass
    from dotenv import load_dotenv
    
    load_dotenv()
    
    
    @dataclass
    class Client:
        _api_key: str = os.getenv('API_KEY'),
        _secret_key: str = os.getenv('SECRET_KEY'),
    
        def get_auth_headers(self) -> dict:
            return {
                "API-KEY-ID": self._api_key,
                "API-SECRET-KEY": self._secret_key
            }
    
    
    def main():
        client = Client()
        print(client.get_auth_headers())
    
    
    if __name__ == '__main__':
        main()
    
[/code]

# 実行結果

[code]

    {'API-KEY-ID': ('AAAAAAAA',), 'API-SECRET-KEY': ('BBBBBBBB',)}
    
[/code]

# 期待している実行結果

[code]

    {'API-KEY-ID': 'AAAAAAAA', 'API-SECRET-KEY': 'BBBBBBBB'}
    
[/code]


CC BY-SA 4.0
2021-06-05T03:06:03.727
77345
2021-06-05T03:37:57.717
9616
question
python
インスタンス変数に環境変数を代入したい


環境変数を取り出している部分

[code]

        _api_key: str = os.getenv('API_KEY'),
        _secret_key: str = os.getenv('SECRET_KEY'),
    
[/code]

これが, この様に解釈されてしまってるようです

[code]

        _api_key = (os.getenv('API_KEY'),)
        _secret_key = (os.getenv('SECRET_KEY'),)
    
[/code]

行末のカンマを取るとよいかも


CC BY-SA 4.0
2021-06-05T03:37:57.717
77347
2021-06-05T03:37:57.717
43025
77345
answer