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

如何在Python 3中扩展datetime.date?,python,python-3.x,Python,Python 3.x,我需要一个类来扩展datetime.date添加与我的应用程序相关的逻辑。它过去与Python2配合得很好,但我不明白如何用Python3编写构造函数。我认为在Python 3中编写派生构造函数的标准方法如下: from datetime import date class my_date(date): def __init__(self, year, month, day): super().__init__(year, month, day) date(2020,

我需要一个类来扩展
datetime.date
添加与我的应用程序相关的逻辑。它过去与Python2配合得很好,但我不明白如何用Python3编写构造函数。我认为在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)
回溯(最近一次呼叫最后一次):
文件“/tmp/test.py”,第8行,在
我的生日(2020年4月18日)
文件“/tmp/test.py”,第5行,在__
super().\uuuu init\uuuuu(年、月、日)
TypeError:object.\uuuu init\uuuuuuuu()只接受一个参数(要初始化的实例)
我应该怎么做才能正确地调用超级构造函数


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

注释中的答案:


查看的Python源代码,您会注意到它没有
\uuuu init\uuuu()
方法,只有
\uuu new\uuuu()
构造函数。这可以解释上述错误。还要注意,
是修饰的(即只读)属性,而不是实例值

super()替换为
pass

产出:

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
而不是继承日期


如果您想延长日期,您可以这样做

from datetime import date


class MyDate(date):
    def __init__(self, year, month, day):
       print(self)


print(date(2020, 4, 18))
print(MyDate(2020, 4, 20))

查看的Python源代码,您会注意到它没有
\uuuu init\uuuu()
方法,只有
\uuu new\uuuu()
构造函数。这可以解释上述错误。还要注意的是,
year
month
day
是修饰的(即只读)属性,而不是实例值。替换
super()。\uuuuu init\uuuuu(年、月、日)
使用
pass
。即使在Python 2中,
\uuuu init\uuuu
也是毫无意义的。当inhereting@Tomerikoo是的,我完全同意。但在这个用例中,使用date类对象而不是扩展date类更有意义。
from datetime import date


class MyDate(date):
    def __init__(self, year, month, day):
       print(self)


print(date(2020, 4, 18))
print(MyDate(2020, 4, 20))