Le Wed, 18 Feb 2009 22:01:34 -0500,
Kent Johnson <ken...@tds.net> s'exprima ainsi:

> Hmm. I guess this is Python 3? In 2.6, open is a function and trying
> to subclass it gives an error:
> 
> In [10]: open
> Out[10]: <built-in function open>
> 
> In [11]: class myopen(open): pass
> 
>    ....:
> 
> TypeError: Error when calling the metaclass bases
>     cannot create 'builtin_function_or_method' instances

But... why not use the proper type instead:

class F(file):
        def __init__(self, file_name):
                self.file_name = file_name
f = F("/home/prog/io/test.py")
print dir(f)
print isinstance(f,types.FileType)
==>
['__class__', '__delattr__', '__dict__', '__doc__', '__enter__', '__exit__', 
'__getattribute__', '__hash__', '__init__', '__iter__', '__module__', 
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 
'close', 'closed', 'encoding', 'file_name', 'fileno', 'flush', 'isatty', 
'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 
'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 
'xreadlines']
True

Then, overload the proper method the call of which you need to catch. Or there 
is a "detail" I do not "catch" ;-)

Denis
------
la vita e estrany
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to