Message49292
Logged In: YES
user_id=1424288
Here's a more interesting example. This works fine, unless
the variables fall through to the global dictionary, or some
code marks them global.
import code
class ManagedVariable:
def get(self):
return None
def set(self, value):
pass
def delete(self):
# Return false to stop the delete.
return True
class ManagedEnvironment(dict):
def __setitem__(self, key, value):
if self.has_key(key):
if isinstance(dict.__getitem__(self, key),
ManagedVariable):
dict.__getitem__(self, key).set(value)
return
dict.__setitem__(self, key, value)
def __getitem__(self, key):
if self.has_key(key):
if isinstance(dict.__getitem__(self, key),
ManagedVariable):
return dict.__getitem__(self, key).get()
return dict.__getitem__(self, key)
def __delitem__(self, key):
if self.has_key(key):
if isinstance(dict.__getitem__(self, key),
ManagedVariable):
if not dict.__getitem__(self, key).delete():
return
dict.__delitem__(self, key)
class RangedInt(ManagedVariable):
def __init__(self, value, (low, high)):
self.value = value
self.low = low
self.high = high
def get(self):
return self.value
def set(self, value):
if value < self.low:
value = self.low
if value > self.high:
value = self.high
self.value = value
class FunctionValue(ManagedVariable):
def __init__(self, get_func = None, set_func = None,
del_func = None):
self.get_func = get_func
self.set_func = set_func
self.del_func = del_func
def get(self):
if self.get_func:
return self.get_func()
return None
def set(self, value):
if self.set_func:
self.set_func(value)
def delete(self):
if self.del_func:
return self.del_func()
return True
class Constant(ManagedVariable):
def __init__(self, value):
self.value = value
def get(self):
return self.value
def delete(self):
return False
import time
d = ManagedEnvironment()
d['ranged'] = RangedInt(1, (0, 100))
d['time'] = FunctionValue(lambda: time.time())
d['constant'] = Constant(42)
code.interact(local=d)
|
|
Date |
User |
Action |
Args |
2007-08-23 15:45:16 | admin | link | issue1402289 messages |
2007-08-23 15:45:16 | admin | create | |
|