は私がのpython3にpython2から何かを移植しようとしたし、次のクラスに関するエラーに直面したスーパー()
class Bound(tuple):
# some methods skipped…
def __new__(cls, value, is_closed):
if value is NegativeInfinity or value is PositiveInfinity:
is_closed = False
return tuple.__new__(cls, (value, is_closed))
def __init__(self, value, is_closed):
"""
See __new__
"""
super(Bound, self).__init__((value, is_closed))
初期化しようと、それはobject.__init__() takes no parameters
で失敗した場合。 super(Bound, self).__init__(…)
は、のメソッドobject
にアクセスしているようですが、これは間違っているようです - super
はオブジェクト__mro__
にちょうど進みますか?物事を絞り込むために
、私は次のような構成に書いた:この例では
class T(tuple):
def __new__(cls, arg):
return super(T, cls).__new__(cls, arg)
def __init__(self, arg):
return super(T, self).__init__(arg)
を、私は同じエラーを取得:T([])
にもかかわらず、私をobject.__init__() takes no parameters
伝えます。
T.__mro__
が(__main__.T, tuple, object)
であるため、これは本質的に混乱します。明示的に型とインスタンスを記述することなく、super()
を使用するとまったく同じことが起こります。
何が問題になるのですか? tuple
は独自の__init__
を持っていないため