]> granicus.if.org Git - python/commitdiff
Closes #10031: overhaul the "imports" section of the programming FAQ.
authorGeorg Brandl <georg@python.org>
Mon, 6 Oct 2014 14:02:09 +0000 (16:02 +0200)
committerGeorg Brandl <georg@python.org>
Mon, 6 Oct 2014 14:02:09 +0000 (16:02 +0200)
Remove the advice to never use relative imports; it is a leftover from 2.x implicit relative imports.
Remove the advice to locally import modules in __init__, it is a strange practice.
Remove the advice to use "from ... import *" with some modules.

Doc/faq/programming.rst

index ffb7e8b13b3a1a3bb8d2a065e192255c3dbd5667..c30c2b63fae420e6afce1ba35b9fd2989f2a05dd 100644 (file)
@@ -292,9 +292,8 @@ What are the "best practices" for using import in a module?
 -----------------------------------------------------------
 
 In general, don't use ``from modulename import *``.  Doing so clutters the
-importer's namespace.  Some people avoid this idiom even with the few modules
-that were designed to be imported in this manner.  Modules designed in this
-manner include :mod:`tkinter`, and :mod:`threading`.
+importer's namespace, and makes it much harder for linters to detect undefined
+names.
 
 Import modules at the top of a file.  Doing so makes it clear what other modules
 your code requires and avoids questions of whether the module name is in scope.
@@ -308,11 +307,6 @@ It's good practice if you import modules in the following order:
    directory) -- e.g. mx.DateTime, ZODB, PIL.Image, etc.
 3. locally-developed modules
 
-Never use relative package imports.  If you're writing code that's in the
-``package.sub.m1`` module and want to import ``package.sub.m2``, do not just
-write ``from . import m2``, even though it's legal.  Write ``from package.sub
-import m2`` instead.  See :pep:`328` for details.
-
 It is sometimes necessary to move imports to a function or class to avoid
 problems with circular imports.  Gordon McMillan says:
 
@@ -343,14 +337,6 @@ module, but loading a module multiple times is virtually free, costing only a
 couple of dictionary lookups.  Even if the module name has gone out of scope,
 the module is probably available in :data:`sys.modules`.
 
-If only instances of a specific class use a module, then it is reasonable to
-import the module in the class's ``__init__`` method and then assign the module
-to an instance variable so that the module is always available (via that
-instance variable) during the life of the object.  Note that to delay an import
-until the class is instantiated, the import must be inside a method.  Putting
-the import inside the class but outside of any method still causes the import to
-occur when the module is initialized.
-
 
 Why are default values shared between objects?
 ----------------------------------------------