[Python-Dev] Simplify the file-like-object interface
Antoine Pitrou
solipsis at pitrou.net
Tue Sep 6 15:12:40 CEST 2005
> That sounds like a good idea. I'm certainly getting concerned about
> the proliferation of methods that people "should" add to file-like
> objects, where read/write are the only fundamental ones needed.
>
> I can't see mixins working, as too many file-like objects are written in C...
One could use "class decorators". For example if you want to define the
method foo() in a file-like class, you could use code like:
def FooExtender(cls):
class wrapper(cls):
pass
try:
# Don't do anything if "foo" already defined
wrapper.foo
except AttributeError:
def foo(self):
""" Automatically generated foo method. """
self.write("foo\n")
wrapper.foo = foo
return wrapper
MyFileClass = FooExtender(MyCFileClass)
This is for classes, but the construct can be adapted to work on objects
instead.
The advantage of using a decorator-like function is that you can do some
complex processing in the function (you could for example automatically
define __ne__ if only __eq__ is defined, and conversely). And it could
probably plug, as an useful convenience or even an automatic mechanism,
into a more sophisticated adaptor system.
More information about the Python-Dev
mailing list