Gordon McMillan wrote: >>>Two of them appear to rely on an implementation >>>detail - that __path__ (only defined for >>>imp.PKG_DIRECTORY's) will be followed even in >>>a plain module. >> >>AFAIK, that's not an implementation detail, but a >>documented way of finding out whether a module is a >>package or not. > > > Correct. But stuffing a __path__ attribute into > a module does *not* make the module a package. > > '''Whenever a submodule of a package is loaded, Python makes sure that the package itself is loaded first, loading its __init__.py file if necessary.''' > > and > > '''Once loaded, the difference between a package and a module is minimal.''' Hmm, I know that Python itself uses __path__ to tell whether it has a package or not, so I don't see why a module can't be regarded as package. Moving the module into a directory of the same name and then renaming it to __init__.py has the same effect. And in that case, hacking __path__ is perfectly legal. >>But it works (tm) :-) > > > For a sufficiently short-sighted definition of "work". You haven't commented on the sys.modules trick yet. This one doesn't even use the __path__ hackery :-) DateTime.py: import sys import mx.DateTime sys.modules[__name__] = mx.DateTime Python 2.1.3 (#1, May 16 2002, 18:59:26) >>> import DateTime >>> DateTime.now() <DateTime object for '2002-07-14 19:51:03.34' at 82307a0> >>> DateTime <module 'mx.DateTime' from '/home/lemburg/projects/mx/DateTime/__init__.py'> >>> id(DateTime) 135726540 >>> from mx import DateTime >>> id(DateTime) 135726540 See: it's the same module :-) -- Marc-Andre Lemburg CEO eGenix.com Software GmbH _______________________________________________________________________ eGenix.com -- Makers of the Python mx Extensions: mxDateTime,mxODBC,... Python Consulting: http://www.egenix.com/ Python Software: http://www.egenix.com/files/python/
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4