Will python never intend to support private, protected and public?

Bengt Richter bokr at oz.net
Mon Oct 3 17:29:36 CEST 2005

On 03 Oct 2005 04:47:26 -0700, Paul Rubin <http://phr.cx@NOSPAM.invalid> wrote:

>bokr at oz.net (Bengt Richter) writes:
>> Would you want to outlaw 'None' as an attribute name?
>> Python seems to be straddling the fence at this point:
>>  >>> c.None = 'c.None'
>>  SyntaxError: assignment to None
>Heehee, I think that's just a compiler artifact, the lexer is treating
>None as a keyword instead of a normal lexical symbol that the compiler
>treats separately.  That's also why it raises SyntaxError instead of
>some other type of error.  Yes, None should be ok as an attribute name.
Not sure whether which compiler. This one seems to differ from the C version.

 >>> import compiler
 >>> compiler.parse("c.None = 'c.None'")
 Module(None, Stmt([Assign([AssAttr(Name('c'), 'None', 'OP_ASSIGN')], Const('c.None'))]))

 >>> compiler.compile("c.None = 'c.None'", '', 'exec')
 <code object <module> at 02EE7FA0, file "", line 1>
 >>> import dis
 >>> dis.dis(compiler.compile("c.None = 'c.None'", '', 'exec'))
   1           0 LOAD_CONST               1 ('c.None')
               3 LOAD_NAME                0 (c)
               6 STORE_ATTR               1 (None)
               9 LOAD_CONST               0 (None)
              12 RETURN_VALUE
 >>> c = type('',(),{})()
 >>> exec   (compiler.compile("c.None = 'c.None'", '', 'exec'))
 >>> c.None

So the compiler module is happy to generate code that you can execute,
but the builtin compiler seems not to be:

 >>> c.None = 'c.None'
 SyntaxError: assignment to None

and definitely not run-time:
 >>> def foo():
 ...     c.None = 'c.None'
   File "<stdin>", line 2
 SyntaxError: assignment to None

Seems like a bug wrt the intent of making compiler.compile work
exactly like the builtin C version. But maybe it has been fixed --
I am still running 2.4 from the beta I built with mingw (because
the new microsoft msi loader won't run on my version of NT4 without
upgrading that I've got too much dll hell to do on this box.
I should also upgrade mingw/msys and recompile, but I spend time here instead ;-/ )

Python 2.4b1 (#56, Nov  3 2004, 01:47:27)
[GCC 3.2.3 (mingw special 20030504-1)] on win32
Type "help", "copyright", "credits" or "license" for more information.

Bengt Richter

More information about the Python-list mailing list