Maybe it would make sense to implement a C-API function to perform a super() lookup, without all the contortions needed currently. It seems wasteful to have to make a super object, use it then immediately discard all the time. However the current logic is entangled into the type a fair bit, so that might take some work.
Spencer Brown > On 15 Jun 2017, at 1:46 pm, Nick Coghlan <ncogh...@gmail.com> wrote: > >> On 15 June 2017 at 11:06, Nathaniel Smith <n...@pobox.com> wrote: >> On Wed, Jun 14, 2017 at 1:54 PM, Barry Scott <ba...@barrys-emacs.org> wrote: >>>> On 13 Jun 2017, at 23:49, Chris Angelico <ros...@gmail.com> wrote: >>>> For that purpose, is it possible to use super().__dir__()? Are there >>>> any considerations where that would fail? >>> >>> Remember that I need to do this in the C API and I want default_dir of self >>> in C not python. >>> >>> super().__dir__ looks at the class above me that is typically object() and >>> so is not useful >>> as it does not list the member function from my class or __mro__ or other >>> stuff I may not be aware of >>> that is important to return. >> >> object.__dir__(your_class_instance) should generally return everything >> you would get if you didn't override __dir__ at all. Remember, that >> code doesn't mean "return the methods and attributes defined on the >> object class", it's "run the object class's __dir__ method with >> self=your_class_instance". >> >> I don't know off-hand if there's a nicer way to do this from C than to >> manually look up the "__dir__" attribute on PyBaseObject_Type. > > This is the kind of case where > https://docs.python.org/3/c-api/object.html#c.PyObject_CallMethod is > useful: > > dir_result = PyObject_CallMethod(base_type, "__dir__", "O", self); > /* Add any additional attributes to the dir_result list */ > return dir_result; > > Fully supporting multiple inheritance is more work (as your link > shows), and often not needed. > > Cheers, > Nick. _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/