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

问题描述 投票:2回答:1

我需要一个扩展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)

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

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

python python-3.x
1个回答
0
投票

评论的答案:

Jens

查看datetime.date的Python源,您会注意到它没有__init__()方法,只有__new__()构造函数。那将解释上述错误。还请注意yearmonthday是修饰(即只读)属性,而不是实例值。

accdias

super().__init__(year, month, day)替换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
© www.soinside.com 2019 - 2024. All rights reserved.