우리는 외부 속성을 통한 사용자 정의가 필요한 많은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!