Python 拉皮条/猴子修补

Python pimping / monkey-patching

我想做一件简单的事情:monkey-patch datetime。我不能完全那样做,因为 datetime 是 C class.

所以我写了下面的代码:


from datetime import datetime as _datetime</p>

<p>class 日期时间(_datetime):
    def withTimeAtMidnight(self):
        return self.replace(时=0,分=0,秒=0,微秒=0)
</pre>

这是一个名为 datetime.py 的文件,位于我称为 pimp 的包中。

根据我收到的错误消息:

Traceback (most recent call last):
  File "run.py", line 1, in 
    from pimp.datetime import datetime
  File "/home/lg/src/project/library/pimp/datetime/datetime.py", line 1, in 
    from datetime import datetime as _datetime
ImportError: cannot import name datetime

我假设我无法让名为 datetime 的模块从另一个名为 datetime 的模块导入任何内容。

我应该如何继续保留我的模块和 class 命名为 datetime

将您的模块放入包中,例如 your_lib.datetime。顶层模块不应使用 datetime 名称。

如果你在 Python 2 然后在顶部添加:

from __future__ import absolute_import

禁止包内的隐式相对导入。那么如果你的目录结构是:

your_lib/
├── datetime.py
└── __init__.py

以下命令有效:

$ python -c 'import your_lib.datetime'

其中 datetime.py 是:

from __future__ import absolute_import
from datetime import timedelta