import uuid
import weakref
class HideStorageMeta(type):
def __dir__(cls):
return [item for item in super().__dir__() if item != '_storage']
class RiddleData:
def __init__(self, poly):
self.poly = poly
self.calls = 0
class Riddle(metaclass=HideStorageMeta):
_storage = {}
def __init__(self, p):
self.__id = uuid.uuid4()
Riddle._storage[self.__id] = RiddleData(p)
self.__finalizer = weakref.finalize(self, self._cleanup, self.__id)
def _cleanup(self, id):
if id in Riddle._storage:
del Riddle._storage[id]
def __call__(self, x):
if self.__id not in Riddle._storage:
raise KeyError(f"Instance with ID {self.__id} not found in storage.")
data = Riddle._storage[self.__id]
if data.calls < 2:
data.calls += 1
return sum(data.poly[i] * x**i for i in range(len(data.poly)))
else:
raise Exception("Too many calls")
def __dir__(self):
return [item for item in super().__dir__() if item != '_storage']
# Test the class
poly = [7, 3, 4, 5, 0, 8, 3, 1]
r = Riddle(poly)
# This will not give any useful information because _storage is hidden
print(vars(r))
# _storage should not be visible in dir output
print(dir(r))
def find(ev):
b = ev(1) + 1
e = ev(b)
ans = []
while e > 0:
q, r = divmod(e, b)
ans.append(r)
e = q
return ans
ans = find(r)
print(ans)
To embed this program on your website, copy the following code and paste it into your website's HTML: