Tworzenie klasy ze wszystkimi elementami określonymi w pliku przy użyciu ConfigParser
Stworzyłem plik podobny do pliku .ini ze wszystkimi wartościami, których potrzebuję później w moim programie, patrz poniżej:
[debugging]
checkForAbort = 10
...
[official]
checkForAbort = 30
...
Chciałbym przeczytać wszystkie te elementy w jednej klasie i udostępnić je z innych części mojego projektu Pythona. Do tej pory mam następujący kod:
from ConfigParser import SafeConfigParser
import glob
class ConfigurationParameters
def __init__(self):
self.checkForAbortDuringIdleTime = None
parser = SafeConfigParser()
# making a list here in case we have multiple files in the future!
candidatesConfiguration = ['my.cfg']
foundCandidates = parser.read(candidatesConfiguration)
missingCandidates = set(candidatesConfiguration) - set(found)
if foundCandidates:
print 'Found config files:', sorted(found)
else
print 'Missing files :', sorted(missing)
print "aborting..."
# check for mandatory sections below
for candidateSections in ['official', 'debugging']:
if not parser.has_section(candidateSections)
print "the mandatory section", candidateSections " is missing"
print "aborting..."
for sectionName in ['official', 'debugging']:
for name, value in parser.items(section_name):
self.name = value
Jestem nowym użytkownikiem Pythona, ale nadal widzę wiele problemów z moim kodem:
Jestem zmuszony dodać atrybut dla każdego elementu w moim pliku klasy. i utrzymuj synchronizację pliku konfiguracyjnego i mojej klasy przez cały czas.Ta klasa nie jest singletonem, dlatego odczyt / parsowanie zostanie wykonane z dowolnego miejsca, do którego jest importowane!Jeśli wartość dodana do pliku konfiguracyjnego nie jest zdefiniowana w mojej klasie, prawdopodobnie ulegnie awarii!Jak mam rozwiązać ten problem? Czy atrybuty klas mogą być tworzone dynamicznie?
Moja klasa musi tylko czytać z wartości, więc nie trzeba pisać do pliku konfiguracyjnego!