__dir__

Peter Otten __peter__ at web.de
Thu May 13 05:24:31 EDT 2004


Jacek Generowicz wrote:

> Is there some way of affecting the way dir finds the information it
> presents?
> 
> For example, supposing a hypothetical __dir__ magic method:
> 
> class collection:
>     def __init__(self, myname, names):
>         self.names = names
>         self.myname = myname
>     def __dir__(self):
>         return ['%s(%s)' % (self.myname,n) for n in self.names]
> 
> class thingy:
>     def __init__(self, *names):
>         self.it = collection('it', names)
> 
> thing = thingy('this', 'that', 'theother')
> 
> dir(thing)
> 
> ['__doc__', '__init__', '__module__', 'it(this)', 'it(that)',
> ['it(theother)']
> 
> 
> In other words, I would like some attributes of an instance to inject
> some information into the output of dir ... to change the way their
> names are perceived by dir.
> 
> Any ideas ?

>>> class C:
...     __members__ = ["Is this evil?", "So what"]
...
>>> dir(C)
['__doc__', '__members__', '__module__']
>>> dir(C())
['Is this evil?', 'So what', '__doc__', '__members__', '__module__']
>>>

However, __members__ is marked as deprecated and, even more important, I
don't know what the side effects of the above may be.
Highly unrecommended.

Peter



More information about the Python-list mailing list