Whoops, pulled the trigger too soon. I also wanted to point out that in the example below__dir__() is returning non-strings. Is that ok, even though attributes must be strings?
n -- On 3/12/07, Neal Norwitz <[EMAIL PROTECTED]> wrote: > I assume this is not the desired behaviour? > > >>> class F: > ... def __dir__(self): > ... return [5] > ... > >>> dir(F()) > [5] > >>> f = F() > >>> dir(f) > [5] > >>> def __dir__(): return [10] > ... > >>> f.__dir__ = __dir__ > >>> dir(f) > [5] > > I think the problem is in _dir_object() > > + PyObject * dirfunc = PyObject_GetAttrString((PyObject*)obj->ob_type, > + "__dir__"); > > Shouldn't the first arg just be obj, not obj->ob_type? > > > Modified: python/branches/p3yk/Python/bltinmodule.c > > ============================================================================== > > --- python/branches/p3yk/Python/bltinmodule.c (original) > > +++ python/branches/p3yk/Python/bltinmodule.c Sat Mar 10 23:13:27 2007 > > @@ -427,15 +427,16 @@ > > PyDoc_STRVAR(dir_doc, > > "dir([object]) -> list of strings\n" > > "\n" > > -"Return an alphabetized list of names comprising (some of) the > > attributes\n" > > -"of the given object, and of attributes reachable from it:\n" > > -"\n" > > -"No argument: the names in the current scope.\n" > > -"Module object: the module attributes.\n" > > -"Type or class object: its attributes, and recursively the attributes > > of\n" > > -" its bases.\n" > > -"Otherwise: its attributes, its class's attributes, and recursively the\n" > > -" attributes of its class's base classes."); > > +"If called without an argument, return the names in the current scope.\n" > > +"Else, return an alphabetized list of names comprising (some of) the > > attributes\n" > > +"of the given object, and of attributes reachable from it.\n" > > +"If the object supplies a method named __dir__, it will be used; > > otherwise\n" > > +"the default dir() logic is used and returns:\n" > > +" for a module object: the module's attributes.\n" > > +" for a class object: its attributes, and recursively the attributes\n" > > +" of its bases.\n" > > +" for an other object: its attributes, its class's attributes, and\n" > > +" recursively the attributes of its class's base classes."); > > 'for an other object' should that be for *any* other object? There > might have been other stuff, this patch was too hard to read. > > n > _______________________________________________ Python-3000-checkins mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000-checkins
