Python Module Internal Representation and Introspection: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 34: Line 34:
===<tt>__loader__</tt>===
===<tt>__loader__</tt>===
===<tt>__spec__</tt>===
===<tt>__spec__</tt>===
===<tt>__package__</tt>===
An empty string for a module, the name of the package for a package.


===<tt>__path__</tt>===
===<tt>__path__</tt>===
The <code>__path__</code> attribute exists only for <code>module</code> instances that represent [[Python_Language_Modularization#Package|packages]], not for those instances that represent ordinary [[Python_Language_Modularization#Modules|modules]].
The <code>__path__</code> attribute exists only for <code>module</code> instances that represent [[Python_Language_Modularization#Package|packages]], not for those instances that represent ordinary [[Python_Language_Modularization#Modules|modules]].


<code>__path__</code> contains the path of the package root directory, where the component modules, [[Python_Language_Modularization#Subpackages|subpackages]], <code>[[Python_Language_Modularization#init_.py|__init__.py]]</code> and <code>[[Python_Language_Modularization#main_.py|__main__.py]]</code> live.
<code>__path__</code> contains a list with the paths of the package root directories, where the component modules, [[Python_Language_Modularization#Subpackages|subpackages]], <code>[[Python_Language_Modularization#init_.py|__init__.py]]</code> and <code>[[Python_Language_Modularization#main_.py|__main__.py]]</code> live.

Revision as of 03:54, 4 January 2023

Internal

Overview

The module Class

All module and package instances are represented internally as instances of the module class.

Attributes

All object instances declared in the module (variables, functions, etc.) become attributes of the module instance and they are accessible with inspect.getmembers(). Additionally, the following special attributes are present:

__name__

The name of the module, as string.

import mymodule
assert mymodule.__name__ == 'mymodule'

__file__

Once imported, the file associated with the module can be determined using the module object's __file__ attribute, as string:

import mymodule
[...]
print(mymodule.__file__)

The directory portion of __file__ should be one of the directories in sys.path.

__doc__

The content of the module docstring, if declared, otherwise None.

__cached__

__loader__

__spec__

__package__

An empty string for a module, the name of the package for a package.

__path__

The __path__ attribute exists only for module instances that represent packages, not for those instances that represent ordinary modules.

__path__ contains a list with the paths of the package root directories, where the component modules, subpackages, __init__.py and __main__.py live.