5

私は最近、このコードが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の動作が異なる理由を理解したいと思います。

4

1 に答える 1

7

これは、5年前に行われ、Python 3.3で現在施行されている決定の結果です。つまり、http: //bugs.python.org/issue1683368

最終的__init__に呼び出されるのはからのものobjectであり、パラメータを受け入れません。これは設計上の決定であり、その理由はバグレポートに概説されています。

于 2013-01-14T18:40:33.123 に答える