how to list the attributes of a class, not an object?

Alf P. Steinbach alfps at
Sun Jan 24 17:37:41 CET 2010

* Robert P. J. Day:
> On Sun, 24 Jan 2010, Alf P. Steinbach wrote:
>> * Robert P. J. Day:
>>>   once again, probably a trivial question but i googled and didn't
>>> get an obvious solution.  how to list the attributes of a *class*?
>>>   eg., i was playing with dicts and noticed that the type returned by
>>> the keys() method was "dict_keys".  so i'm now curious as to the
>>> attributes of the dict_keys class.  but i don't know how to look at
>>> that without first *creating* such an instance, then asking for
>>> "dir(dk)".
>> Like,
>>   dir( list )
>> where 'list' is the built-in type.
>> There's a pretty-printer for that somewhere, but I can't recall.
>   except that doesn't work for
>   >>> dir(dict_keys)
> so what's the difference there?

'list' is a built-in type that by default is available.

'dict_keys' is a type that you're not meant to use directly, so it's not made 
available by default.

The 'type' function yields the type of its argument, so you *can* do e.g.

   DictKeys = type( {}.keys() )

   dir( DictKeys )
   list( vars( DictKeys ) )
   help( DictKeys )

It doesn't help much though because the only method of interrest is __iter__, 
which produces an iterator that you can use e.g. in a for loop or to construct a 
list, whatever.

The relevant place to find out more about keys() is in the documentation.

Cheers & hth.,

- Alf

More information about the Python-list mailing list