当前位置: 首页 > 面试题库 >

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

莫振
2023-03-14
问题内容

为什么以下代码不起作用(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)


 类似资料:
  • 问题内容: 我有以下课程: 有没有搞错 ? 最糟糕的是我无法尝试super(),因为Exception是基于旧类的… 编辑:而且,是的,我试图切换继承/初始化的顺序。 EDIT2:我在Ubuntu8.10上使用CPython 2.4。您最近才知道这种信息很有用;-)。无论如何,这个小谜语已经让我的三个同事闭上了嘴。你会成为我今天最好的朋友… 问题答案: 两者和都在C中实现。 我认为您可以按照以下方

  • 因此,我正在Ubuntu 14.04机器上将所有工具从python2迁移到python3.4。到目前为止,我已经完成了以下工作: 仅针对我的用户,在我的zshrc中将python别名为python3 在系统本身上安装了pip3(但无论如何我都会使用VirtualNVS,所以我不会真正使用它) 将我的VirtualNVRapper“make”别名更改为('workon'在下面被调用为'v') 奇怪的

  • 问题内容: 我尝试通过继承两个类来创建myPet,但是出现错误,例如: 然后定义了以下类,然后创建新的类myPets,我想同时继承Dog和Substance。但是错误:从类“狗”和“物质”的多重继承 问题答案: Swift不支持多重继承,遵循ObjectiveC。这不是从两个类继承: 它是从一类继承而采用的协议。在https://developer.apple.com/library/conten

  • 下面的代码引发: 线程“main”java.lang.ClassCastException中的异常:不能将类子级转换为类java.util.List(子级位于加载器“app”的未命名模块中;java.util.List位于加载器“bootstrap”的模块java.base中) 我真的不知道它为什么会这样做。我想我写的代码是正确的。 请帮助我理解这一点,以及如何解决这个问题。

  • 问题内容: 当我读一本Java书籍时,作者曾说过,在设计类时,与继承一起使用通常是不安全的。例如: 在上面的类中,我们应放置,以便其他类不能从此继承。我的问题是,为什么允许另一个类从中继承是不安全的? 问题答案: 因为很难(不可能?)做到正确,尤其是 对称 属性 。 说你有一堂课。产生如果参数也是并且具有相同的重量。如果要实现,则仅当参数也是汽车(重量除外)时,它才应屈服,并且还应比较制造商,发动

  • 问题内容: 我想在HTML文档中设置文本的字体样式和字体大小。 我曾经学习过,每个HTML元素都继承其父元素的样式属性。就我而言,所有的子元素都应具有size 。 但是,为什么这不是工作,,,等? 问题答案: ,,--默认情况下,它们不会继承,但是您可以将其设置为使用CSS继承