如何在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))