Как часть моего скрипта, я создал класс конфигурации, который переопределяет все базовые типы, чтобы обеспечить дополнительный контроль. Например, config['heading']['value'] = 'xyz'
выполняет проверку перед установкой значения.
Во всяком случае, я только что провел последний час, отслеживая ошибку, которая, казалось, происходила с перерывами, но на самом деле оказывается, что это происходит постоянно, и я просто никогда не замечал, что она довольно невидима.
Это максимально урезано, сохраняя общее представление о том, как это работает. Если я передам что-нибудь и назначу это cls
, то любой новый экземпляр класса заменит переменную. Как я могу получить доступ к cls._data
из _ConfigItem
без его изменения?
class _ConfigItem(object):
@property
def data(self):
return self._data
class _ConfigItemStr(str, _ConfigItem):
def __new__(cls, config_dict):
cls._data = config_dict
return str.__new__(cls, cls._data['value'])
s1 = _ConfigItemStr({'value': 'test1'})
print(s1)
#test1
print(s1.data)
#{'value': 'test1'}
s2 = _ConfigItemStr({'value': 'test2'})
print(s1)
#test1
print(s1.data)
#{'value': 'test2'}
В этом случае желаемый результат для s1.data
по-прежнему содержит {'value': 'test1'}
. Заметьте, что это в Python 2.7, но я планирую совместить его с форвардами.