设计思路
- 数据存储:使用Python内置的字典来存储键值对。
- 值总和控制:在每次更新键值对时,检查所有值的总和是否超过100。如果超过,则按比例调整所有值,使总和为100。
- 特定键访问控制:对于以'private_'开头的键,通过自定义的访问方法来实现类内部访问,外部无法直接获取和修改。
代码实现
class CustomDict:
def __init__(self):
self.data = {}
def __setitem__(self, key, value):
self.data[key] = value
total = sum(self.data.values())
if total > 100:
ratio = 100 / total
for k in self.data:
self.data[k] *= ratio
def __getitem__(self, key):
if key.startswith('private_'):
raise AttributeError("Can't access private key from outside")
return self.data[key]
def get_internal(self, key):
return self.data.get(key)
def set_internal(self, key, value):
self.data[key] = value
total = sum(self.data.values())
if total > 100:
ratio = 100 / total
for k in self.data:
self.data[k] *= ratio
使用示例
cd = CustomDict()
cd['public_key1'] = 50
cd['public_key2'] = 50
print(cd['public_key1'])
try:
print(cd['private_key'])
except AttributeError as e:
print(e)
cd.set_internal('private_key', 30)
print(cd.get_internal('private_key'))