By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,630 Members | 1,252 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,630 IT Pros & Developers. It's quick & easy.

I can't inherit from "compiled" classes ?

P: n/a
Hello list,

I'm trying to subclass socket and select, for both I get:
""" TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given) """, I don't
understand this error. Why would python try to pass 3 arguments (what
are they) ?

Googling for this error gave random results talking about try to
inherit a "Package" but socket is definitely a class,
(/usr/lib/python2.4/socket.py). Not sure about select thought.

I've did the following to receive the error:
"""
In [1]: import socket

In [2]: class PollingSocket(socket):
...: pass
...:
---------------------------------------------------------------------------
exceptions.TypeError Traceback (most
recent call last)

/home/hq4ever/<ipython console>

TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
"""
What am I breaking wrong?

Thank you,
Maxim.

--
Cheers,
Maxim Veksler

"Free as in Freedom" - Do u GNU ?
Apr 29 '07 #1
Share this Question
Share on Google+
5 Replies


P: n/a
On Apr 29, 12:48 pm, "Maxim Veksler" <hq4e...@gmail.comwrote:
Hello list,

I'm trying to subclass socket and select, for both I get:
""" TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given) """, I don't
understand this error. Why would python try to pass 3 arguments (what
are they) ?

Googling for this error gave random results talking about try to
inherit a "Package" but socket is definitely a class,
(/usr/lib/python2.4/socket.py). Not sure about select thought.

I've did the following to receive the error:
"""
In [1]: import socket

In [2]: class PollingSocket(socket):
...: pass
...:
---------------------------------------------------------------------------
exceptions.TypeError Traceback (most
recent call last)

/home/hq4ever/<ipython console>

TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
"""

What am I breaking wrong?

Thank you,
Maxim.

--
Cheers,
Maxim Veksler

"Free as in Freedom" - Do u GNU ?
Try:

import socket

class PollingSocket(socket.socket):
pass

~Sean

Apr 29 '07 #2

P: n/a
In <ma***************************************@python. org>, Maxim Veksler
wrote:
Hello list,

I'm trying to subclass socket and select, for both I get:
""" TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given) """, I don't
understand this error. Why would python try to pass 3 arguments (what
are they) ?

Googling for this error gave random results talking about try to
inherit a "Package" but socket is definitely a class,
(/usr/lib/python2.4/socket.py). Not sure about select thought.

I've did the following to receive the error:
"""
In [1]: import socket

In [2]: class PollingSocket(socket):
...: pass
...:
---------------------------------------------------------------------------
exceptions.TypeError Traceback (most
recent call last)

/home/hq4ever/<ipython console>

TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
"""
What am I breaking wrong?
You are trying to subclass a module here, just like the error message
says. The module contains a `socket` type:

In [3]: import socket

In [4]: type(socket)
Out[4]: <type 'module'>

In [5]: type(socket.socket)
Out[5]: <type 'type'>

`select.select()` is a function:

In [6]: import select

In [7]: type(select.select)
Out[7]: <type 'builtin_function_or_method'>

Ciao,
Marc 'BlackJack' Rintsch
Apr 29 '07 #3

P: n/a
On 4/29/07, Marc 'BlackJack' Rintsch <bj****@gmx.netwrote:
In <ma***************************************@python. org>, Maxim Veksler
wrote:
Hello list,

I'm trying to subclass socket and select, for both I get:
""" TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given) """, I don't
understand this error. Why would python try to pass 3 arguments (what
are they) ?

Googling for this error gave random results talking about try to
inherit a "Package" but socket is definitely a class,
(/usr/lib/python2.4/socket.py). Not sure about select thought.

I've did the following to receive the error:
"""
In [1]: import socket

In [2]: class PollingSocket(socket):
...: pass
...:
---------------------------------------------------------------------------
exceptions.TypeError Traceback (most
recent call last)

/home/hq4ever/<ipython console>

TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
"""
What am I breaking wrong?

You are trying to subclass a module here, just like the error message
says. The module contains a `socket` type:

In [3]: import socket

In [4]: type(socket)
Out[4]: <type 'module'>

In [5]: type(socket.socket)
Out[5]: <type 'type'>
Great,
"""
from socket import socket
import select

class PollingSocket(socket):
pass
"""
`select.select()` is a function:

In [6]: import select

In [7]: type(select.select)
Out[7]: <type 'builtin_function_or_method'>
I understand what you are saying, and at the same time don't
understand why it doesn't work. Isn't "everything an object" in
python? And if something is an object does it not implies it's an
instance of some class?

Does this mean I can't somehow make this work: """class
PollingSocket(socket.socket, select):""" ?

Thanks for the help,
Ciao,
Marc 'BlackJack' Rintsch
Maxim.
--
Cheers,
Maxim Veksler

"Free as in Freedom" - Do u GNU ?
Apr 29 '07 #4

P: n/a
En Sun, 29 Apr 2007 17:27:59 -0300, Maxim Veksler <hq*****@gmail.com>
escribió:
On 4/29/07, Marc 'BlackJack' Rintsch <bj****@gmx.netwrote:
>>
"""
from socket import socket
import select

class PollingSocket(socket):
pass
"""
>`select.select()` is a function:

I understand what you are saying, and at the same time don't
understand why it doesn't work. Isn't "everything an object" in
python? And if something is an object does it not implies it's an
instance of some class?
I'm not sure if your last statement is true now, and certainly it was not
true before Python 2.2; there were objects that were not class instances
(numbers, functions, by example). Maybe some objects still remain that are
not instances of any class.
Anyway, "an object" and "a class" are not the same thing, and you can't
use an arbitrary object when you actually need a class.
Does this mean I can't somehow make this work: """class
PollingSocket(socket.socket, select):""" ?
Those things inside () are called "base classes"; this is "class"
inheritance; you create a new "class" inheriting from existing ones. That
is, you cant inherit from select, because select is a function, not a
class.

--
Gabriel Genellina
Apr 29 '07 #5

P: n/a
I understand what you are saying, and at the same time don't
understand why it doesn't work. Isn't "everything an object" in
python? And if something is an object does it not implies it's an
instance of some class?
It means that, but it seems that you can't subclass everything, especially
functions:
>>ft = type(lambda x: x)
ft
<type 'function'>
>>class FunctionSubclass(ft): pass
....
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: Error when calling the metaclass bases
type 'function' is not an acceptable base type
>>>
But even _if_ you could - what good does it do to you? select being an
_instance_ of function, it doesn't help you anything to subclass from it's
class. This doesn't affect select itself, in the same sense that instances
of some class Foo aren't affected by a subclass Bar(Foo).

Besides that, the semantics of "subclassing" a function type are unclear.
What would you expect?
Does this mean I can't somehow make this work: """class
PollingSocket(socket.socket, select):""" ?
As I point out above, this is a non-sensical thing to do anyway. Maybe you
should tell us what you want to accomplish here?

Diez
Apr 30 '07 #6

This discussion thread is closed

Replies have been disabled for this discussion.