为什么以下代码不起作用(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
问题内容: 当我读一本Java书籍时,作者曾说过,在设计类时,与继承一起使用通常是不安全的。例如: 在上面的类中,我们应放置,以便其他类不能从此继承。我的问题是,为什么允许另一个类从中继承是不安全的? 问题答案: 因为很难(不可能?)做到正确,尤其是 对称 属性 。 说你有一堂课。产生如果参数也是并且具有相同的重量。如果要实现,则仅当参数也是汽车(重量除外)时,它才应屈服,并且还应比较制造商,发动
问题内容: 我想在HTML文档中设置文本的字体样式和字体大小。 我曾经学习过,每个HTML元素都继承其父元素的样式属性。就我而言,所有的子元素都应具有size 。 但是,为什么这不是工作,,,等? 问题答案: ,,--默认情况下,它们不会继承,但是您可以将其设置为使用CSS继承
我能够运行以下代码: 现在我可以从类B的实例访问display()方法,那么为什么说静态方法不能继承呢。如果我在类B中声明一个方法display,那么可以说超类中的方法被隐藏,子类中的方法被调用,那么这不是重写方法时所需要的行为。