私は最近、このコードがPython 2.7で問題なく実行されるが、Python3では失敗することに驚いた。
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)
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
このコードが3でのみ失敗する原因となるPython2と3の違いは何ですか?ヒント__init__
-MyTimeにメソッドを追加すると、問題が修正されます。私はエラーを修正したり、より良いコードを書いたりすることに興味はありません(私はすでに両方を行っています)。代わりに、なぜこれが起こったのか、具体的にはPython3.3の動作が異なる理由を理解したいと思います。