[Python-Dev] Type of range object members (original) (raw)
"Martin v. Löwis" martin at v.loewis.de
Wed Aug 16 22:21:54 CEST 2006
- Previous message: [Python-Dev] Type of range object members
- Next message: [Python-Dev] Type of range object members
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Neal Norwitz schrieb:
I was playing around with a little patch to avoid that penalty. It doesn't take any additional memory, just a handful of bits we aren't using. :-)
There are common schemes that allow constant-time issubclass tests, although they do require more memory:
give each base class a small unique number, starting with 1 (0 means no number has been assigned). Give each class a bitmap of all base classes, plus a field for the maximum-numbered base class. Then,
def issubclass(C, B): return B.classnum and (B.classnum < C.maxbasenum) and
bit_set(C.basenums, B.classnum) Supports multiple inheritance, space requirement linear with the number of classes that are used as base classes. Numbering should recycle class numbers when a class is gced.restrict optimization to single-inheritance. Give each class a "depth" (distance from object, 0 for object and multiply-inherited classes). Also give each class an array of bases, ordered by depth. Then,
def issubclass(C, B): if not C.depth: return expensive_issubclass(C, B) return B.depth < C.depth and (C.bases[B.depth] is B)
Space requirement is linear with the depth of the class (but I think tp_mro could be used, if the formula is changed to (C.bases[C.depth-B.depth] is B))
Regards, Martin
- Previous message: [Python-Dev] Type of range object members
- Next message: [Python-Dev] Type of range object members
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]