Unicode をサブクラス化すると、3.3 より前の Python では非推奨の警告が発生し、Python 3.3 ではエラーが発生する状況に遭遇しました。
# prove that unicode.__init__ accepts parameters
s = unicode('foo')
s.__init__('foo')
unicode.__init__(s, 'foo')
class unicode2(unicode):
def __init__(self, other):
super(unicode2, self).__init__(other)
s = unicode2('foo')
class unicode3(unicode):
def __init__(self, other):
unicode.__init__(self, other)
s = unicode3('foo')
興味深いことに、警告/エラーは最初の 3 行では発生しませんが、代わりに 8 行目と 14 行目で発生します。Python 2.7 での出力は次のとおりです。
> python -Wd .\init.py
.\init.py:8: DeprecationWarning: object.__init__() takes no parameters
super(unicode2, self).__init__(other)
.\init.py:14: DeprecationWarning: object.__init__() takes no parameters
unicode.__init__(self, other)
コードは、問題を例示するために単純化されています。実際のアプリケーションでは、単に super を呼び出すだけではありません__init__
。
最初の 3 行から、Unicode クラスが実装__init__
し、そのメソッドが少なくとも 1 つのパラメーターを受け入れることがわかります。ただし、サブクラスからそのメソッドを呼び出したい場合、呼び出すかどうかに関係なく、そうすることができないようsuper()
です。
unicode.__init__
Unicode インスタンスを呼び出しても問題ないのに、Unicode サブクラスを呼び出せないのはなぜですか? unicode クラスをサブクラス化する場合、作成者は何をする必要がありますか?