issubclass funny business

Gordon McMillan gmcm at hypernet.com
Tue Apr 11 12:23:22 EDT 2000


Les Schaffer wrote:

> I have the following class hierarchy:
> 
> ------ in module FileScanner -----
> 
> class StandardArrayFileScanner(ArrayFileScanner):
> 
> --------- in module cie ----------
> 
> from FileScanner import StandardArrayFileScanner
> 
> class CIE_Standards(StandardArrayFileScanner):
> ...    
> 
> class Photopic(CIE_Standards):
> ...
> 
> class CIE(CIE_Standards):
> ...
> 
> 
> but when i need to test whther an object is an instance of a subclass
> of StandardArrayFileScanner:
> 
>         # make sure std is of the correct type
>         if not issubclass(std.__class__, StandardArrayFileScanner):
>             import cie
>             print std.__class__, cie.CIE.__bases__
> 	    raise NotStandardArrayError
> 
> 
> but it doesnt work, even though std is of type cie.CIE :
> 
> (gustav)~/Engineering/dspring/stoplite/matlab/Jue-Data/: python FileScanner.py

You are running FileScanner. Therefore, in FileScanner, class 
StandardArrayFileScanner is defined in __main__. If you 
trickle up to the top of __bases__ above, you'll find 
FileScanner.StandardArrayFileScanner, which is not the same 
object. At least, that's my guess at what's going on.
 
> cie.CIE (<class cie.CIE_Standards at 813b320>,)  <=== result of print stmt
> 
> huh??????


- Gordon




More information about the Python-list mailing list