Python拉皮条/猴子修补

时间:2015-06-25 13:02:53

标签: python datetime python-import

我想做一件简单的事:猴子补丁datetime。我不能完全这样做,因为datetime是一个C类。

所以我写了下面的代码:


from datetime import datetime as _datetime

class datetime(_datetime): def withTimeAtMidnight(self): return self.replace(hour=0, minute=0, second=0, microsecond=0)

这是在名为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的模块和类?

1 个答案:

答案 0 :(得分:2)

将模块放入包中,例如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