Python: определения, сделанные во внешней оболочке, получают неверный атрибут `.__ module__` - PullRequest
4 голосов
/ 06 декабря 2010

Я создаю приложение wxPython, которое предоставляет оболочку для использования пользователем.(Это wx.lib.shell.PyShell, оболочка, которая поставляется с wxPython.)

Проблема в том, что определения, сделанные в этой оболочке, имеют плохой атрибут .__module__.Например:

>>> def f(): 0
... 
>>> f.__module__
>>> f.__module__ is None
True
>>> class A(object):
...     pass
...     
>>> 
>>> A.__module__
'__builtin__'

Я думаю, что атрибут .__module__ для обоих этих объектов должен быть __main__.Точно сказать не могу.Но это определенно не должно быть None или __builtin__.

Как я могу заставить оболочку давать хороший атрибут .__module__ этим функциям и классам?

Ответы [ 2 ]

1 голос
/ 06 декабря 2010

В IDLE и в демонстрационной версии PyShell для демонстрации wxPython я получаю следующее:

>>> def f(): 0

>>> f.__module__
'__main__'
>>> f.__module__ is None
False
>>> class A(object):
        pass

>>> A.__module__
'__main__'

Мне кажется, это работает правильно. Я не уверен, что ты делаешь на своей машине. Я использую Python 2.5, wxPython 2.8.10.1 в Windows XP.

0 голосов
/ 07 декабря 2010

Причина, по которой это произошло, заключается в том, что я использовал пользовательский диктат местных жителей и не смог вставить в него значимый '__name__'. Как только вы поместите элемент '__name__' в локальный текст, который вы даете PyShell, его значение будет использоваться для установки атрибута .__module__ для функций и классов, определенных в оболочке.

...