编辑 Python 内置的 datetime 模块(只是为了测试内置模块的编辑工作原理)。但它仍然表现得像从未改变过一样

Editing Python's buit-in datetime module (just to to test how editing of built-in modules works). But it still behaves like it never changed

提问人:edvard_munch 提问时间:11/16/2023 更新时间:11/17/2023 访问量:58

问:

在 Ubuntu 和 Windows 上都试过这个

Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:34:34) [MSC v.1928 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> datetime.__file__
'C:\\Program Files\\python3810\\lib\\datetime.py'

然后编辑文件。只是为了测试,替换了 方法的返回行isoformatclass date

class date:
...
    def isoformat(self):
        """Return the date formatted according to ISO.

        This is 'YYYY-MM-DD'.

        References:
        - http://www.w3.org/TR/NOTE-datetime
        - http://www.cl.cam.ac.uk/~mgk25/iso-time.html
        """
        # return "%04d-%02d-%02d" % (self._year, self._month, self._day)
        return "%04d-%02d" % (self._year, self._month)

    __str__ = isoformat

重新加载了 Python shell,但 str 的返回值是一样的。

Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:34:34) [MSC v.1928 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> d = datetime.date.today()
>>> d
datetime.date(2023, 11, 16)
>>> d.__str__()
'2023-11-16'

那么,这是否应该像这样工作,或者必须做其他事情?

蟒蛇 python-3.x python -打包

评论

0赞 edvard_munch 11/16/2023
有一个评论现在删除的答案,它基本上回答了我的问题。我不记得确切的用户名,但如果你会读到这篇文章,你可以发布你的答案,我会接受。
0赞 edvard_munch 11/16/2023
我只是不知道这个用 Python 编写的模块仅用作备份,并且有一个用 C 编写的主要_datetime。所以我删除了它,它按我的预期工作。但是,我已经把它放回去了,因为所有这些只是为了了解它如何与用 Python 编写的模块一起工作。from _datetime import *
0赞 edvard_munch 11/16/2023
这非常适合系统范围的 python 安装。它破坏了我的 Django 环境。它崩溃了,但调查这个没有意义,因为我得到了我想要的答案。我唯一会尝试研究的是从哪里导入日期时间_datetime用 C 编写的。它在 Python 安装中的位置。SystemError: initialization of _psycopg raised unreported exception

答:

0赞 DamirX 11/17/2023 #1

你走错了路。 尝试使用从 datetime 模块对象继承,尽管它并不完全是微不足道的。

import datetime

class MyDate(datetime.date):
    def __new__(cls, *args, **kwargs):
        return super().__new__(cls, *args, **kwargs)
    def isoformat(self):
        return "%04d-%02d" % (self.year, self.month)
    __str__ = isoformat

if __name__ == '__main__':
    date = MyDate(1,2,3)
    print(date)