> On 15 Jun 2017, at 04:45, Nick Coghlan <ncogh...@gmail.com> wrote:
> 
> On 15 June 2017 at 11:06, Nathaniel Smith <n...@pobox.com 
> <mailto: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 
> <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;

But I need the result of __dir__ for my object not its base. Then I need to
add in the list of member attributes that are missing because python
itself has no knowledge of them they are accessed via getattr().

Now I cannot call __dir__ for my object in the implementation of __dir__
for the obvious reason.

Today all classes defined using PyCXX for python3 cannot return the list of
member variables via dir(obj). Where as in python2 I can make dir() work.

> Fully supporting multiple inheritance is more work (as your link
> shows), and often not needed.

> 
> Cheers,
> Nick.
> 
> -- 
> Nick Coghlan   |   ncogh...@gmail.com <mailto:ncogh...@gmail.com>   |   
> Brisbane, Australia

_______________________________________________
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