我最近惊讶地发现这个代码可以在Python 2.7上运行,但在Python 3上会失败.
import datetime
class MyTime(datetime.datetime):
def __new__(cls, year):
ob = datetime.datetime.__new__(cls, year, 1, 1)
return ob
class MySpecialTime(MyTime):
def __init__(self, *args, **kwargs):
super(MySpecialTime, self).__init__(*args, **kwargs)
MyTime(2013)
MySpecialTime(2013)
Run Code Online (Sandbox Code Playgroud)
在Python 3.3上,最后一行崩溃时出现此错误:
Traceback (most recent call last):
File "file.py", line 13, in <module>
MySpecialTime(2013)
File "file.py", line 10, in __init__
super(MySpecialTime, self).__init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters
Run Code Online (Sandbox Code Playgroud)
Python 2和3之间有什么不同导致此代码仅在3上失败?提示 - 向__init__MyTime 添加和方法可以解决问题.我对纠正错误或编写更好的代码不感兴趣(我已经完成了这两个代码).相反,我想了解为什么会发生这种情况,特别是为什么Python 3.3的行为不同.
小智 6
这是五年前做出的决定的后果,现在用Python 3.3强制执行,即:http: //bugs.python.org/issue1683368
在__init__那最终被称为是一个从object,那一个也不会接受的参数-这是一个设计决策及其推理的错误报告概述.
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |