Python 类属性为dict,第二次修改时,为什么出现两个不同的值
Python 类属性为dict,第二次修改时,为什么出现两个不同的值??
1、当这个类属性修改几次后,每次查看该类属性时,可能得到的结果不一样,请问是为什么?
2、使用add_user_data_access_rule这个方法修改后,每次获取data_access_rule_dict的结果不一样
3、调用clear_data_access_rule_dict方法后,有时候会得到之前的结果,有时候会得到空字典
import logging
from threading import Lock
import gc
logger = logging.getLogger(_name)
class DataAccessRuleCache(object):
data_access_rule_dict = {}
lock = Lock()
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
ori = super(DataAccessRuleCache, cls)
cls._instance = ori.__new__(cls, *args, **kw)
cls._instance.__dict__ = cls.data_access_rule_dict
return cls._instance
@classmethod
def clear_data_access_rule_dict(cls):
cls.data_access_rule_dict = {}
@classmethod
def add_user_data_access_rule(cls, which_database, user_id, data_access_rule):
if not cls.__check_which_database_user_data_access_rule_exists(which_database):
cls.data_access_rule_dict.update({which_database: {}})
if str(user_id) not in cls.data_access_rule_dict[which_database]:
cls.data_access_rule_dict[which_database].update({str(user_id): data_access_rule})
else:
cls.data_access_rule_dict[which_database][str(user_id)] = data_access_rule
@classmethod
def __check_which_database_user_data_access_rule_exists(cls, which_database):
if which_database not in cls.data_access_rule_dict.keys():
return False
return True
@classmethod
def check_user_data_access_rule_exists(cls, which_database, user_id):
if which_database not in cls.data_access_rule_dict.keys():
return False
user_data_access_rule_dict = cls.data_access_rule_dict[which_database]
if str(user_id) not in user_data_access_rule_dict:
return False
return True
@classmethod
def get_user_data_access_rule(cls, which_database, user_id):
if not cls.check_user_data_access_rule_exists(which_database, user_id):
return []
user_data_access_rule_list = cls.data_access_rule_dict[which_database][str(user_id)]
return user_data_access_rule_list
推荐文章: