New style classes
tim.one at comcast.net
Sun Mar 2 03:42:03 CET 2003
> Forgive me if this question is naive.
Oh, all right <wink>. I doubt that it is, though.
> I am trying to understand new-style classes. In particular I want to be
> able to detect them in C-code.
Precision in language will be key to solving your problem. Let's start
here: do you really want to detect new-style classes, or instances of
new-style classes? Do you realize that a new-style class is itself an
instance of a new-style class (the latter being the former's metaclass)?
> I understand that PyInstance_Check(obj) returns true in C if obj is an
> instance of an old-style class.
> However, it does not return true if obj is an instance of a new-style
> So, how does one check in C whether or not obj is an instance of a class
> (either old style or new style)?
If I were you, I'd try to reframe the problem so that this question
vanishes. If you're determined, PyObject_HasAttrString(obj, "__class__")
may get close enough, but, as above, new-style classes are themselves
instances of other new-style classes, so the distinction between "class" and
"instance" has become pretty empty.
>>> class C(object):
>>> class C:
<class __main__.C at 0x006A4930>
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: class C has no attribute '__class__'
IOW, everything there had a __class__ attribute except for an old-style
More information about the Python-list