gratifiant > comp.lang.* > comp.lang.python

Alex Marandon (13/06/2008, 17h09)
Bonjour,

Voici quelque chose qui m'a fait perdre quelques minutes :

>>> import logging
>>> logging.handlers.RotatingFileHandler

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'handlers'
>>> import logging.handlers
>>> logging.handlers.RotatingFileHandler <class logging.handlers.RotatingFileHandler at 0x785db0>


Alors que d'habitude:

>>> import os
>>> os.path.join <function join at 0x3f770>


Pourquoi dans le premier cas est-on obligé d'importer explicitement le
sous module et pas dans le second ?

Bonne fin de vendredi à tous :)
Laurent Pointal (13/06/2008, 21h43)
Le Fri, 13 Jun 2008 16:09:38 +0100, Alex Marandon a écrit :

> Bonjour,
> Voici quelque chose qui m'a fait perdre quelques minutes :
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> AttributeError: 'module' object has no attribute 'handlers'
> <class logging.handlers.RotatingFileHandler at 0x785db0>
> Alors que d'habitude:
> <function join at 0x3f770>
> Pourquoi dans le premier cas est-on obligé d'importer explicitement le
> sous module et pas dans le second ?


Si tu regardes dans les modules standards Python, tu verras qu'il y a un
*module* os.py, qui exporte explicitement un symbole path. Par contre,
logging est bien un *package* et - à moins qu'ils n'automatisent des
choses via le __init__.py, il faut explicitement importer les sous-
modules.

Voilà.

> Bonne fin de vendredi à tous :)


Itou.
Alex Marandon (16/06/2008, 11h07)
Laurent Pointal wrote:
> Le Fri, 13 Jun 2008 16:09:38 +0100, Alex Marandon a écrit :
> Si tu regardes dans les modules standards Python, tu verras qu'il y a un
> *module* os.py, qui exporte explicitement un symbole path. Par contre,
> logging est bien un *package* et - à moins qu'ils n'automatisent des
> choses via le __init__.py, il faut explicitement importer les sous-
> modules.


D'accord, je comprends. Y a-t-il alors une imprécision au début de
? Je cite :

"""
14.5 logging -- Logging facility for Python

New in version 2.3. This module defines functions and classes which
implement a flexible error logging system for applications.
"""

Plus loin dans cette page, logging est effectivement décrit comme étant
un package.
Laurent Pointal (20/06/2008, 20h39)
Le Mon, 16 Jun 2008 10:07:48 +0100, Alex Marandon a écrit :

> Laurent Pointal wrote:
> D'accord, je comprends. Y a-t-il alors une imprécision au début de
> ? Je cite :
> """
> 14.5 logging -- Logging facility for Python
> New in version 2.3. This module defines functions and classes which
> implement a flexible error logging system for applications. """
> Plus loin dans cette page, logging est effectivement décrit comme étant
> un package.


Si dans le __init__.py d'un package, tu défini des noms, ceux-ci sont
alors accessibles directement par un import du package lui-même.
Discussions similaires