python - 为什么我不能继承 datetime.date?

标签 python oop datetime subclass

为什么以下方法不起作用(Python 2.5.2)?

>>> import datetime
>>> class D(datetime.date):
        def __init__(self, year):
            datetime.date.__init__(self, year, 1, 1)
>>> D(2008)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: function takes exactly 3 arguments (1 given)

我想创建一个类似于 datetime.date 的类,但具有不同的 __init__ 函数。显然我的函数永远不会被调用。而是调用原始 datetime.date.__init__ 并失败,因为它需要 3 个参数,而我传入一个。

这里发生了什么?这是一个线索吗?

>>> datetime.date.__init__
<slot wrapper '__init__' of 'object' objects>

谢谢!

最佳答案

关于其他几个答案,这与 C 本身中实现的日期没有任何关系。 __init__ 方法什么也不做,因为它们是 不可变 对象,因此构造函数 (__new__) 应该完成所有工作。您会看到将 int、str 等子类化的相同行为。

>>> import datetime
>>> class D(datetime.date):
        def __new__(cls, year):
            return datetime.date.__new__(cls, year, 1, 1)


>>> D(2008)
D(2008, 1, 1)

关于python - 为什么我不能继承 datetime.date?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/399022/

相关文章:

python - 从 onnx 文件中查找输入形状

javascript - 如何包装构造函数?

javascript - 关于OOP的一些问题

java - 计算Java中日期的差异

python - 在 Python 中,in 运算符是如何实现的?它是否使用迭代器的 next() 方法?

python - 如何将 Pandas DatetimeIndex 相应地转换为字符串

php - MySQL 使用 PHP 将 DATETIME 更新为 NOW()

objective-c - NSDateFormatter 生产(空)SQLite 和 iOS 5.1

python - matplotlib 中的 Hexgrid 显示意外的颜色

c# - 需要在值类型的对象中使用随机数生成器但不希望其依赖的负担