when does issubclass fail?

C

Chris Green

Heyas folks,

When does issubclass fail? That's a loaded question so here's my test
case (also available at http://cmg.dok.org/code/classimports.tar.gz):

directory structure:

../test.py
../d/__init__.py
../d/b.py
../c/__init__.py
../c/a.py

#--------[a.py]---------
class A(object):
pass
#------[end a.py]-------

#--------[b.py]---------
import sys
sys.path.append("/home/cmg/src/python/classtest/a")
class B(a.A):
pass
#------[end b.py]-------

#--------[test.py]------
import c.a
import d.b
print issubclass(d.b.B,c.a.A)
#--------[end test.py]--

issubclass(d.b.B,c.a.A) => False

I'm trying to figure out why this is failing. My guess is that there
are two distinct imports of a.A in memory though I can't come up with
a simple test case that makes this happen without manipulating
sys.path.

My goal is to define a baseclass BasePoller and then have user
configured directories searched for that baseclass so I can load
modules at run time. Since I can't do absolute imports, I treat that
directory as a suitable spot to import from and do some fancy dir()
walking to find instances of my subclass.

This work fine as long as the path I search is contained within an
original element of the main init script. I'm trying to handle the
case where the directory is specified as an absolute path and can't
come up with a way to make issubclass work.

Is there anyway out of this other than defining a special attribute I
can check for the presense of?
 
?

=?ISO-8859-1?Q?Walter_D=F6rwald?=

Chris said:
Heyas folks,

When does issubclass fail? That's a loaded question so here's my test
case (also available at http://cmg.dok.org/code/classimports.tar.gz):

directory structure:

./test.py
./d/__init__.py
./d/b.py
./c/__init__.py
./c/a.py

#--------[a.py]---------
class A(object):
pass
#------[end a.py]-------

#--------[b.py]---------
import sys
sys.path.append("/home/cmg/src/python/classtest/a")
class B(a.A):
pass
#------[end b.py]-------

#--------[test.py]------
import c.a
import d.b
print issubclass(d.b.B,c.a.A)
#--------[end test.py]--

issubclass(d.b.B,c.a.A) => False

I'm trying to figure out why this is failing. My guess is that there
are two distinct imports of a.A in memory though I can't come up with
a simple test case that makes this happen without manipulating
sys.path.

The simplest demo for this problem is importing the __main__ script
a second time as a module:
-----[foo.py]-----
class A:
pass

import foo

print issubclass(A, foo.A)
------------------

executing "python foo.py" prints
True
False

Bye,
Walter Dörwald
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top