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/

Reply via email to