所以我有以下代码:
def fort_knox():
gold = [0]
beep = {}
beep[1] = 50
class impl(object):
def remove_gold(self, amt):
raise Exception('No withdrawals!')
def add_gold(self, amt):
if amt < 0:
raise Exception('No withdrawals!')
else:
gold[0] += amt
def count_gold(self):
return gold[0]
def discover_beep(self,key):
return beep[key]
return impl()
可以通过这种方式访问值:
fort = fort_knox()
print(fort.discover_beep.__func__.__closure__[0].cell_contents)
print(fort.add_gold.__func__.__closure__[0].cell_contents[0])
但是我想知道是否可以通过某种方式确保此方法无法正常工作。我试图使在不知道键的情况下无法访问beep [1]的值(这样就不会打印蜂鸣声),或者在不使用功能的情况下更改金币。 (这是我的实际用例的最小示例。我的目标是,即使有人知道此源代码,他们也将无法在没有键的情况下查看提示音的值或在函数外更改金色。他们将无法修改这段代码。)
我考虑添加第二个变量,该变量包含相同的gold值,并且在函数中进行检查,如果将第一个变量修改为将其设置为该值,反之亦然,但是我认为这不会起作用,因为有人可以同时修改两者。
(这不是那个家伙发布的其他问题的重复,因为我在问如何防止使用“单元格”骗局来访问我尝试隐藏的内容,而这通常是在询问私人事物。是一个更具体的问题。)