__dir__

J

Jacek Generowicz

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 ?
 
P

Peter Otten

Jacek said:
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 ?
.... __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
 
J

Jacek Generowicz

Peter Otten said:
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.

Great, sounds just perfect for my needs ;-)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,022
Latest member
MaybelleMa

Latest Threads

Top