Duncan Booth wrote: > e.g. Assuming that the MyDatabase class does something nasty to a file: > >>>>class MyDatabase(object): > > def __init__(self, filename): > self.filename = filename > def initialise(self): > print "Splat %s" % self.filename > >>>>eval('''[ cls for cls in {}.__class__.__bases__[0].__subclasses__() > > if 'MyDatabase' in `cls` > ][0]('importantfile').initialise()''', dict(__builtins__=None)) > Splat importantfile
Interestingly, I don't seem to be able to create a file object as a class attribute in restricted mode: py> class C(object): ... def __init__(self): ... self.f = file('temp.txt', 'w') ... py> eval('''[ cls for cls in {}.__class__.__bases__[0].__subclasses__() if cls.__name__ == 'C'][0]().f.write("stuff")''', dict(__builtins__=None)) Traceback (most recent call last): File "<interactive input>", line 1, in ? File "<string>", line 0, in ? AttributeError: 'C' object has no attribute 'f' py> eval('''[ cls for cls in {}.__class__.__bases__[0].__subclasses__() if cls.__name__ == 'C'][0]().__dict__''', dict(__builtins__=None)) {} I don't get an error for calling the file constructor, but the f attribute is never set AFAICT. STeVe -- http://mail.python.org/mailman/listinfo/python-list