Classic and New Style Classes?
Peter Otten
__peter__ at web.de
Thu Jun 24 03:14:08 EDT 2004
Chris S. wrote:
> I'm generating the source of an object from a list of objects. Therefore
> I need to determine if the object is a class definition (i.e. 'def
> something(whatever):') or a class instance (i.e. 'somename =
> somethingelse()'). With classic classes this is trivial, since all I
> have to do is check the type. However, for the new "improved" style
> classes this seems next to impossible, since everything is essentially
> an instance of something.
>
> isinstance(class, classinfo) won't work since I won't necessarily know
> classinfo.
>
> Is there any way to make this distinction? Any help is appreciated.
It's not clear to me why isinstance() wouldn't work:
>>> import types
>>> def f(): pass
...
>>> class T(object): pass
...
>>> class U: pass
...
>>> isinstance(T(), types.FunctionType)
False
>>> isinstance(U(), types.FunctionType)
False
>>> isinstance(f, types.FunctionType)
True
Another option would be to use callable(), which also returns True for
classes and callable instances:
>>> class V(object):
... def __call__(self): pass
...
>>> callable(T)
True
>>> callable(T())
False
>>> callable(V())
True
Peter
More information about the Python-list
mailing list