Я пытаюсь сделать менеджер файлов конфигурации, который хранит словари в файле рассола, в папке конфигурации в том же каталоге.У меня проблемы с надоедливой AttributeError, которая утверждает, что у меня нет атрибута _name, который я определил в первой строке init ().
Основная программа имеет2 класса, один наследует от Exceptions (класс ошибок), а другой наследует от dict (основной класс).Init берет имя и находит, существует ли файл.Если этого не происходит, то в данный файл записывается пустой словарь.
Я получаю сообщение об ошибке, когда я:
1. открываю существующий файл для печати ключей
2. записываемпара ключ-значение для существующего файла
3. попытаться получить ключ из словаря
Я пытался не вызывать dict. setitem в init и ничего не изменилось, я все еще получаю ошибку.Я попытался просто загрузить файл, делая абсолютно ничего , и не смог заставить его работать.
import os
import pickle
class ConfigDict(dict):
'''
This class is responsible for all main functions.
Pass a string as an argument without a file type.
Keywords such as 'database' and 'aiconstructer' work well.
'''
def __init__(self, name):
self._name = name+'.pickle'
if not os.path.isfile(self._name):
with open(self._name, 'wb') as f:
pickle.dump('{}', f)
with open(self._name,'rb') as f:
obj = pickle.load(f)
if len(obj) > 2:
for k in obj.keys():
dict.__setitem__(self, k, obj[k])
def __getitem__(self, key):
if not key in self.keys():
raise ConfigKeyError(self, key)
return dict.__getitem__(key)
def __setitem__(self, key, val):
dict.__setitem__(self, key, val)
with open(self._name, 'wb') as f:
pickle.dump(self, f)
Трассировка выглядит следующим образом:
Traceback (most recent call last):
File "interface.py", line 12, in <module>
test = ConfigDict('alpha')
File "/home/bear/Desktop/Config/confdict.py", line 35, in __init__
obj = pickle.load(f)
File "/home/bear/Desktop/Config/confdict.py", line 47, in __setitem__
with open(self._name, 'wb') as f:
AttributeError: 'ConfigDict' object has no attribute '_name'
Код для interface.py, который инициирует это:
import sys
from confdict import ConfigDict, ConfigKeyError
test = ConfigDict('alpha')
if len(sys.argv) == 3:
key = sys.argv[1]
val = sys.argv[2]
print('Writing')
test[key] = val
print('Done')
elif len(sys.argv) == 2:
key = sys.argv[1]
print('{}:{}'.format(key,test[key]))
else:
print('Keys : Values')
print('-----------------')
for k in test.keys():
print('{} : {}'.format(k,test[k]))
Я ожидаю, что смогу загрузить содержимое файла pickle в self, но вместо этого я получу AttributeError.Это то, что я делаю грамматически неправильно, или есть правило, которому я забыл следовать?Большое спасибо за любую помощь заранее.