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. (And of
course if you wanted to get really fancy and handle cases where your
object inherits from some type other than 'object', or where some user
sticks your type into a multiple-inheritance hierarchy, you might
potentially want to find "__dir__" using super lookup instead of going
directly to PyBaseObject_Type. From a quick google it looks like this
page gives an approach for doing that:
https://pythonextensionpatterns.readthedocs.io/en/latest/super_call.html)

-n

-- 
Nathaniel J. Smith -- https://vorpus.org
_______________________________________________
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