Контекст: я использую код Python. В своем коде я использую модуль ConfigParser, для которого читать и обновлять поля можно с помощью методов, указывающих раздел и поле ключа. Теперь я работал над оболочкой для ConfigParser, где я установил __getatrr__
и __setarr__
, и если переменная не является внутренней (_var), я бы использовал ConfigParser для чтения и сохранения полей (я видел другие способыразличать, является ли вызов для __getatrr__
и __setarr__
внутренним или внешним, но логика подчеркивания была для меня достаточно простой).
Вопрос: Теперь ConfigParser принимает 2 аргумента, раздел и поле ключа,Если я хочу войти с именем переменной, эти 2 части должны быть в имени переменной. Пока что я разделил раздел и ключевое поле с подчеркиванием. Но возможно ли иметь что-то вроде следующего?
configPareserWrapper.section.keyfield = 'something'
print(configPareserWrapper.section.keyfield)
Причина, я считаю, красивее. Если я попробую это, __getattr__
получит только section
, кажется, что keyfield
отброшено.
Ссылка на код:
from ConfigParser import SafeConfigParser
class config_wrap():
def __init__(self):
self._configParser = SafeConfigParser()
def __enter__(self, conf_file='settings.ini', *args):
self._configParser.read('./' + conf_file)
return self
def __getattr__(self, name):
#all internals act as normal
if name[0] == '_':
return object.__getattribute__(self, name)
else:
section = name.split('_')[0]
key = ''.join(name.split('_')[1:])
return self._configParser.get(section, key)
def __setattr__(self, name, value):
#all internals act as normal
if name[0] == '_':
if name == '_dict__':
super(self).__setattr__(name, value)
else:
self.__dict__[name] = value
else:
section = name.split('_')[0]
key = ''.join(name.split('_')[1:])
self._configParser.set(section, key, str(value))
спасибо