Документация для dir гласит:
Если объект является объектом типа или класса, список содержит имена его атрибутов и рекурсивные атрибуты его баз.
В вашем примере ваш член класса экспортируется как атрибуты экземпляра, а не атрибуты класса, что вам нужно при экспорте нестатического члена класса.Вот почему вам нужно создать экземпляр класса в python, чтобы dir возвращал атрибуты, потому что атрибуты не существуют до тех пор, пока не будет вызван метод init .
При объявлении атрибутов класса онибудет отображаться при вызове dir для типа, потому что атрибуты класса сразу после определения класса:
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> class Foo(object):
... name = "blah"
... def __init__(self):
... self.second_name = "blah2"
...
>>> dir(Foo)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribut
e__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_e
x__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_
_weakref__', 'name']
>>> f = Foo()
>>> f
>>> dir(f)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribut
e__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_e
x__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_
_weakref__', 'name', 'second_name']