gpt4 book ai didi

python - 如何在 Python 3 中扩展 datetime.date?

转载 作者:行者123 更新时间:2023-12-04 15:30:43 25 4
gpt4 key购买 nike

我需要一个类来扩展 datetime.date 添加与我的应用程序相关的逻辑。它曾经在 Python 2 中运行良好,但我不明白如何在 Python 3 中编写构造函数。我认为在 Python 3 中编写派生构造函数的标准方法是这样的:

from datetime import date

class my_date(date):
def __init__(self, year, month, day):
super().__init__(year, month, day)

date(2020, 4, 18)
my_date(2020, 4, 18)

但是,这段代码失败了:

Traceback (most recent call last):
File "/tmp/test.py", line 8, in <module>
my_date(2020, 4, 18)
File "/tmp/test.py", line 5, in __init__
super().__init__(year, month, day)
TypeError: object.__init__() takes exactly one argument (the instance to initialize)

我应该怎么做才能正确调用 super 构造函数?

特别是,datetime.date 明确接受用三个数字进行初始化。为什么错误消息说它需要一个参数?为什么问题出在 object.__init__() 而不是 datetime.date.__init__()

最佳答案

来自评论的回答:

Jens

Looking at the Python source of datetime.date you’ll notice that it doesn’t have an __init__() method, only a __new__() constructor. That would explain the above error. Also note that year, month, day are decorated (i.e. read only) properties, not instance values.

accdias

Replace super().__init__(year, month, day) with pass

from datetime import date

class my_date(date):
pass

d1 = date(2020, 4, 18)
d2 = my_date(2020, 4, 18)

print(d1,d2)

输出:

2020-04-18 2020-04-18

无论您需要做什么,您都可以考虑使用组合而不是继承:

class MyDateClass:
def __init__(self, a_date):
self.my_date = a_date

# add members/methods that do stuff wiht a_date

而不是继承日期。

关于python - 如何在 Python 3 中扩展 datetime.date?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61285865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com