Python 拉皮条/猴子修补

标签 python datetime python-import

我想做一件简单的事情: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/

相关文章:

python - 优化傅立叶变换信号长度

python - 在图像上绘制真实的实心圆

Python Docx - 如何对标题进行编号?

c# - 使用 AM/PM 标识符解析日期时间

Python:模拟修补模块,无论它是从哪里导入的

python - 如何以及在哪里从 github 安装 python 模块

python - Sqlite:无法选择具有大整数 id 的行

java - 无法使用 session.createSQLQuery() 方法使用 Hibernate 更新 mySql 中的 DATETIME 类型列

python - 如何使用 pandas 创建具有条件日期时间的新列

python - 无法在 Django 中将类从一个应用程序导入另一个应用程序