Lazy Python usage (hack request)
Pearu Peterson
pearu at ioc.ee
Sat Dec 30 08:04:23 EST 2000
Hi,
Is it possible to achive the following behavior in Python?
>>> import lazy
>>> a = b
No name 'b' defined, using default 777
>>> print a
777
Note that changing the python session above is not an option. (Also 'No'
for the answer;-)
Just to avoid questions 'Why do you need it?', I would use it in
PySymbolic (but not in its Kernel!) for defining new Symbol instances in
fly (it's very tedious to define 'b = Symbol("b")',etc all the time).
Here lazy.py would be something like the following:
#Begin of lazy.py
import UserDict,sys
class myDict(UserDict.UserDict):
def __getitem__(self, key):
if not self.data.has_key(key):
print 'No name %s defined, using default 777'%(`key`)
self.data[key] = 777
return self.data[key]
sys.modules['__builtin__'].__dict__ = myDict(sys.modules['__builtin__'].__dict__)
#EOF lazy.py
When trying to set sys.modules['__builtin__'].__dict__, an exception
TypeError: read-only special attribute
is raised.
Is there anyway to go around that? May be in C level?
Any hints, suggestions, or similar are appreciated.
Thanks,
Pearu
More information about the Python-list
mailing list