我想做一件简单的事情:monkey-patch datetime
。我不能完全那样做,因为 datetime
是一个 C 类。
所以我写了下面的代码:
from datetime import datetime as _datetime<p></p>
<p>class datetime(_datetime):
def withTimeAtMidnight(self):
return self.replace(hour=0, minute=0, second=0, microsecond=0)
</p>
这是在我称为 pimp 的包中名为 datetime.py 的文件中。
从我收到的错误消息中:
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
的模块导入任何内容。
我应该如何继续将我的模块和类命名为 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
关于Python 拉皮条/猴子修补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31051184/