2016-03-16 4 views
-2

Я создаю класс отображения для отображения различных видов информации, например, Dir (object) печатает dir (объект) на несколько столбцов и разных цветов. Он отлично работает, за исключением стандартного dir(). Примером может служить:Использование dir() на верхнем уровне в классе

from display import Display 
show = Display(object) 
show.Dir()    #prints multi-column dir(object) 
show = Display(None)  #want it same as multi-column top level dir() 

Код друга; это показывает проблему. Я использую ipython в emacs. Для меня есть 2 способа построить класс: (1) Введите его в интерактивном режиме; (2) импортировать его. Сейчас я получаю разные ответы.

class C: 
    print('in class scope, globals:', globals().keys(), '\n') 
    print('in class scope, dirs: ', dir(), '\n') 
    print('in class scope, eval: ', eval('dir()',globals()), '\n') 
    def f(self): 
     print ('in metod scope, globals:', globals().keys(), '\n') 
     print ('in method scope, dir: ', dir(), '\n') 
     print('in method scope, eval: ', eval('dir()',globals()), '\n') 

obj = C() 
obj.f() 

Я хочу obj.f(), чтобы напечатать то, что вы получите, если вы ввели в директории() в IPython строке. Если вы входите вручную, это то, что вы получаете. Если вы импортируете его, это не так. Предположим, что класс C выше в c.py. Затем

from c import C 
obj = C() 
obj.f() 

Дает другой результат, который, возможно, должен. Я хочу создать класс C, чтобы импорт делал то же самое, что и ручная запись.

Я прошу прощения за мою медлительность, поскольку я только что вернулся к серьезному изучению языкового программирования после многих лет использования lisp для серьезной обработки данных.

+0

Что не работает? Каков ожидаемый результат? Где соответствующий код? –

+2

«Он отлично работает, за исключением стандартного dir()» - это на самом деле не дает понять, что происходит неправильно или какая проблема вы пытаетесь решить. Вы не показали нам, что вы сделали, или даже задали нам вопрос. Независимо от того, что вы пытаетесь сделать, мы не можем помочь вам с этим немного работать. – user2357112

ответ

0

Чтобы получить эффект верхнего уровня dir() в классе, загрузите его при запуске, например, поместите модуль в /.ipython/startup/. Затем класс входит на уровне . С импортом это не так. Все очевидное, я думаю, но не для нового парня.

Смежные вопросы