【发布时间】:2021-08-20 06:53:47
【问题描述】:
我想创建一个简单的类,它只将数据存储/保存为类属性,而不将实例创建为对象。
就像在我的代码中可以从任何地方访问一样简单:
class DATA:
foo = {}
bar = {}
现在我想更进一步,始终将对foo 和bar 的更改保存在一个文件中,例如搁置,仍然没有创建对象/实例。
我最初的想法是这样的:
class DATA2:
foo = {}
bar = {}
_shelve = False
def __setattr__(self, name, value):
if self._shelve is False:
self.__dict__['_shelve'] = shelve.open('datastorage.shelve')
self.__dict__['_shelve'][name] = value
self.__dict__[name] = value
但是 __setattr__ 不能像这样使用 self 参数来使用。而且在类实例上似乎没有__setattr__ 方法。
我的第二种方法是使用元类,它在后台创建一个类实例,将其隐藏在代码中:
class _DATA_MetaClass(type):
foo = {}
bar = {}
_shelve = False
def __setattr__(self, name, value):
if self._shelve is False:
self.__dict__['_shelve'] = shelve.open('datastorage.shelve')
self.__dict__['_shelve'][name] = value
self.__dict__[name] = value
class DATA(object):
__metaclass__ = _DATA_MetaClass
DATA.x = 'val'
这不起作用,它会产生:
TypeError: 'dictproxy' object does not support item assignment
这是为什么呢?
【问题讨论】:
标签: python python-2.7 object setattr