Accessing overridden __builtin__s?
bruno at modulix
onurb at xiludom.gro
Tue Mar 14 04:27:06 EST 2006
garyjefferson123 at yahoo.com wrote:
> I'm having a scoping problem. I have a module called SpecialFile,
The convention is to use all_lowercase names for modules, and CamelCase
for classes.
> which defines:
>
> def open(fname, mode):
> return SpecialFile(fname, mode)
This shadows the builtin open() function.
> class SpecialFile:
Old-style classes are deprecated, please use new-style classes
> def __init__(self, fname, mode):
> self.f = open(fname, mode)
> ...
>
>
> The problem, if it isn't obvioius, is that the open() call in __init__
> no longer refers to the builtin open(), but to the module open(). So,
> if I do:
>
> f = SpecialFile.open(name, mode)
>
> I get infinite recursion.
>
> How do I tell my class that I want to refer to the __builtin__ open(),
> and not the one defined in the module?
You can use Steven's solution, or keep a reference to the builtin open()
function before defining your own open() function:
builtin_open = open
def open(fname, mode):
return SpecialFile(fname, mode):
class SpecialFile(object):
def __init__(self, fname, mode):
self.f = builtin_open(fname, mode)
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb at xiludom.gro'.split('@')])"
More information about the Python-list
mailing list