理解作者对分配 datetime.datetime = self 的选择

Understanding author's choice for assigning datetime.datetime = self

我试图理解以下代码,特别是第 5 行(被注释掉的行,我自己注释掉了)。

  >>> class PartyTime():
    ...     def __call__(self,*args):
    ...         imp.reload(datetime)
    ...         value = datetime.datetime(*args)
    ...         #datetime.datetime = self 
    ...         return value

    ... etc
    >>> p = PartyTime()
    >>> print p(2013,2,14)
    2013-02-14 00:00:00

如您所见,第 5 行被注释掉 #datetime.datetime = self 但该函数运行正常。为什么作者包括那行?您可以看到完整的文章 here(大约一半)。 self 的分配有什么帮助?

就是所谓的"monkey patching"的例子。注释掉的行在导入的模块中进行了更改,datetime.

执行完p(2013,2,14)后(如果不注释掉该行),代码

datetime.datetime()

不执行通常执行的操作,而是在 p 实例上执行 __call__

这通常是不好的做法,所以我不会将其称为作者编写好软件的选择,而只是一个例子。作者自己形容这是一个愚蠢的想法:

Since everything in Python is essentially names bound to objects, we can do silly (but interesting) stuff like this