Package name with '.' in them: Python Bug ?

Terry Reedy tjreedy at udel.edu
Fri Mar 19 15:52:54 EST 2004


"Yannick Patois" <patois at calvix.org> wrote in message
news:c3fd5j$mlg$1 at sunnews.cern.ch...
> Terry Reedy wrote:
> > Since 'static variable' is not a Python concept, I do not know what you
> > mean.

> how do you call 'a' in class A ?

(non-method) attribute, possibly 'member' (of class A).


> > Given that you rebound A.a to 1 from None, I especially do not know
what
> > you mean.
>
> I dont understand.

When you call this class

> <<<< file: A.py
> class A:
>      a=None
>      def __init__(self,a=None):
>          if (a):
>              A.a=a

with the statement a=A.A(1), you enter __init__ with a==1, trigger the
if(a) [if(1)]conditional and execute A.a=a [A.a=1], thereby rebinding class
attribute a from None, as originally set, to 1.  Leaving aside the misuse
of 'static' in C, 'static' usually means 'unchanging', whereas you change
A.a.


> > As you seem to be aware, Python expects modules to have a 'nice' name
> > consisting of
> > legal_Python_indentifier.py.
>
> Which are ? Where to find this info ?

Tutorial I presume, definitely Reference Manual under 'names' and/or
'identifiers'.

> >  If you evade this, you are a bit on your own
> > and may run into untested corner cases.
>
> Untested area contains bugs, that's why it's interesting to test them.

Yes, I have done similar things.

> > I would put more print statements into both A.A and B.B
> > and maybe even aTest.py to see where execution first differs.

To restate: if I were to investigate further, I would add prints
statements, since that has so far worked well for me with Python.  What you
do is up to you.

> It breaks in B, if I remember well.

In what way?  Since the line  'a=A.A(1)', should still rebind A.a, it is
puzzling that the following line 'b=B.B()' should act any differently.  The
only thing I can think of is that the name change caused the line 'import
A' to import A under a different internal name so that module A in B is no
longer that same as module A in aTest.  I would test this by putting 'print
id(A)' in both files after the imports.  I would also add

import sys
print sys.modules

to the end of aTest.  I suspect that this will clear up the mystery.

Terry J. Reedy








More information about the Python-list mailing list