Accessing overridden __builtin__s?
bruno at modulix
onurb at xiludom.gro
Tue Mar 14 10:27:06 CET 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
> 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):
def __init__(self, fname, mode):
self.f = builtin_open(fname, mode)
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