Frustrated with scopes
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Wed Aug 12 08:20:26 EDT 2009
On Wed, 12 Aug 2009 04:49:06 -0700, andrew cooke wrote:
>> It would be helpful if you were to describe the type of behavior you
>> expect.
>
> Sorry, I didn't make myself clear. When run the code gives
> NameError: name 'source' is not defined
> because the class namespace blocks the function namespace (or
> something...).
James asked you to describe the behaviour you expect. Please explain what
you expect, and what you actually get. Post the ACTUAL error message, not
a summary, not a paraphrase, but an actual copy and paste.
In any case, your code snippet works for me:
>>> class _StreamFactory(object):
... @staticmethod
... def __call__(lines, source, join=''.join):
... class Line(object):
... __source = source
... __join = join
...
>>> obj = _StreamFactory()
>>> obj(['a', 'b'], "ab")
>>>
No errors. Of course it doesn't return anything, because your code
snippet doesn't return anything either. Here's a modified version which
returns the inner class:
>>> class _StreamFactory2(object):
... @staticmethod
... def __call__(lines, source, join=''.join):
... class Line(object):
... __source = source
... __join = join
... return Line
...
>>> obj = _StreamFactory2()
>>> K = obj(['a', 'b'], "ab")
>>> K
<class '__main__.Line'>
>>> K._Line__source
'ab'
Works perfectly. I suspect your error is probably something like you have
misspelled "source" somewhere.
--
Steven
More information about the Python-list
mailing list