This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Subclassing from Modules
Type: Stage:
Components: Interpreter Core Versions: Python 2.4
process
Status: closed Resolution: wont fix
Dependencies: Superseder:
Assigned To: gvanrossum Nosy List: christian.heimes, georg.brandl, gvanrossum, lemburg
Priority: normal Keywords:

Created on 2003-07-03 10:32 by lemburg, last changed 2022-04-10 16:09 by admin. This issue is now closed.

Messages (4)
msg16833 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2003-07-03 10:32
In Python 2.2.3 there's a problem with accidental 
subclassing from a Python module, e.g.

import MyStuff

class A(MyStuff):
     pass

this gives no error until you try to instantiate the
class:

o = A()

TypeError: 'module' object is not callable

In Python 2.3 the error is generated at module 
startup time:

class A(MyStuff):
     pass
TypeError: function takes at most 2 arguments (3 given)

Since it is rather common that you create modules which
have the same name as their most important class, I
would find it more appropriate to raise a TypeError
with a message "can't subclass a module instance"
in both versions.


msg55196 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2007-08-23 20:07
In 2.5, the message says "module.__init__() takes at most 2 arguments (3
given)", which is at least a bit more specific.

You get similar errors when "deriving" from other arbitrary objects, so
I don't know if a special case makes sense here.
msg57776 - (view) Author: Christian Heimes (christian.heimes) * (Python committer) Date: 2007-11-23 09:02
I agree. Python can't stop the developer from doing stupid things. We
could remove Py_TPFLAGS_BASETYPE from the module type but that could
cause incompatibilities with existing code.

I'm assigning the bug to our beloved dictator to ask for his opinion.
msg57837 - (view) Author: Guido van Rossum (gvanrossum) * (Python committer) Date: 2007-11-26 04:16
I don't see an issue to be fixed here; adding special tests in order to
provide more detailed error messages is rarely a good idea.

Also, PEP 8 has said for years now that modules should *not* be named
the same as classes.  Yes, there are a few such modules in the standard
library.  They're historical mistakes that will be fixed in 3.0.
History
Date User Action Args
2022-04-10 16:09:40adminsetgithub: 38780
2007-11-26 04:16:17gvanrossumsetstatus: pending -> closed
messages: + msg57837
2007-11-23 09:02:05christian.heimessetstatus: open -> pending
assignee: gvanrossum
resolution: wont fix
messages: + msg57776
nosy: + christian.heimes, gvanrossum
2007-08-23 20:07:49georg.brandlsetnosy: + georg.brandl
messages: + msg55196
2003-07-03 10:32:45lemburgcreate