ホームページ >バックエンド開発 >Python チュートリアル >楽な Python 設定ファイルを目指して バージョン Ø
私たちは、外部プロパティによるカスタマイズを必要とする多くの Python アプリケーション、またはハードコードされていないプロパティやランタイム構成プロパティをカスタマイズしたり、動作に影響を与えたいアプリケーションを作成します。 ソリューションを Google でさまざまに検索すると、実際には機能するものの、実際のアプリケーションに適切に拡張できないコード サンプルを示すチュートリアルが表示されます。
これらの一連の記事は、アプリケーション構成プロパティを管理するための、シンプルで保守可能、簡単に拡張可能なメカニズムを目指して、リファクタリングと再実装を繰り返しながら、さまざまな実装を通じた私の取り組みを文書化しています。
私が見つけたチュートリアル バージョンは、ライブラリ開発者が実装が機能することを証明するために提供するコード スニペットを拡張したものにすぎません。 これは概念実証を提供するには十分ですが、これらのスニペットはアプリケーションの現実世界では拡張できません。
次のコード スニペットは、この例です。
import configparser def create_config(): config = configparser.ConfigParser() # Add sections and key-value pairs config['General'] = { 'debug': 'True', 'log_level': 'info' } config['Database'] = { 'db_name': 'example_db', 'db_host': 'localhost', 'db_port': '5432' } with open('config.ini', 'w') as configfile: config.write(configfile) if __name__ == "__main__": create_config()
このコード スニペットでは確かに設定値を永続化できますが、これらの永続化された値を読み取るという問題が残ります。 繰り返しますが、実装開発者スニペットは、次のコード スニペットに示すように、これらの値を取得する方法に関するサンプル コードを提供します。
import configparser def read_config(): config = configparser.ConfigParser() config.read('config.ini') # Access values from the configuration file debug_mode = config.getboolean('General', 'debug') log_level = config.get('General', 'log_level') db_name = config.get('Database', 'db_name') db_host = config.get('Database', 'db_host') db_port = config.get('Database', 'db_port') # Return a dictionary with the retrieved values config_values = { 'debug_mode': debug_mode, 'log_level': log_level, 'db_name': db_name, 'db_host': db_host, 'db_port': db_port } return config_values if __name__ == "__main__": # Call the function to read the configuration file config_data = read_config() # Print the retrieved values print('Debug Mode', config_data['debug_mode']) print('Log Level', config_data['log_level']) print('Database Name', config_data['db_name']) print('Database Host', config_data['db_host']) print('Database Port', config_data['db_port'])
上記のコードには多くの問題があることがわかります。 小規模なスクリプトでは完全に許容されますが、コードでは、実際の Python 変数名に関連する文字列値の使用と、大規模なコード ベース全体での潜在的な拡散に問題があります。 これはグローバル定数を使用することで軽減される可能性がありますが、私の意見では、これは拡張性がなく、Andrew Hunt と David Thomas が独創的な著書『The Pragmatic Programmer』で提唱した基本的なソフトウェア設計原則に従っておらず、DRY に失敗しているためです。原則、別名「自分自身を繰り返さない」。
この記事のソースコードはここにあります。
私が概説した問題のいくつかを解決するための初期実装を文書化した次回の投稿を参照してください。
以上が楽な Python 設定ファイルを目指して バージョン Øの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。