New style classes
Tim Peters
tim.one at comcast.net
Sat Mar 1 21:42:03 EST 2003
More information about the Python-list mailing list
Sat Mar 1 21:42:03 EST 2003
- Previous message (by thread): cross platform application configuration files
- Next message (by thread): Dictionary data types question
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
[Travis Oliphant] > 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. Right. > However, it does not return true if obj is an instance of a new-style > class. Ditto. > 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): ... pass ... >>> C().__class__ <class '__main__.C'> >>> C.__class__ <type 'type'> >>> C.__class__.__class__ <type 'type'> >>> int.__class__ <type 'type'> >>> class C: ... pass ... >>> C().__class__ <class __main__.C at 0x006A4930> >>> C.__class__ 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 class.
- Previous message (by thread): cross platform application configuration files
- Next message (by thread): Dictionary data types question
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list