First, I've looked a fair bit and can't find how one can find the base
classes of a subclass? isinstance and issubclass sort of do the
opposite of what I want. Surely somewhere there is something like
MyThingee.something.orOther.baseClasses()
You can get the direct parents of a class with the attribute __bases__.
The class attribute __mro__ returns a tuple of for the method resolution
order. But instead of poking around yourself I suggest you use the
inspect module. It provides a high level interface.
class Example:
... pass
...
Example.__bases__
(<class 'object'>,)
Example.__mro__
(<class '__main__.Example'>, <class 'object'>)
But what happens if I try to subclass function?
First attempt:
class MyFunction(function):
.... pass
....
Traceback (most recent call last):
File "<stdin>", line 1, in<module>
NameError: name 'function' is not defined
There is no object called function in the list of builtins. You can't
subclass from function anyway so there is no point in accessing the
function object. If you want to create some callable class you have to
provide a method call "__call__". It's called when you call the
instances of your class like a function.
def a():
... pass
...
type(a)
<class 'function'>
function = type(a)
class MyFunc(function):
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: type 'function' is not an acceptable base type
Anyway, again can you point me to somewhere that I can learn more? In
particular, is there a list somewhere of the builtin types that are
not subclassable?
I don't think it's documented anyway. You have to try yourself. In
general you don't have to subclass builtin types. Some classes are
tricky to subclass like e.g. immutable classes (str, bytes) or dict.
Christian
--
http://mail.python.org/mailman/listinfo/python-list