3

次の機能が機能しないのはなぜですか。

class CTest(tuple):
    def __init__(self,arg):
        if type(arg) is tuple:
            super(CTest,self).__init__((2,2))
        else:
            super(CTest,self).__init__(arg)
a=CTest((1,1))
print a

出力は(1,1)ですが、(2,2)が表示されると思います。

また、そのオブジェクトに対して非推奨の警告が表示されるのはなぜですか。init()はパラメータを取りませんか?代わりに何をすべきですか?

4

1 に答える 1

5

タプルは不変です。オーバーライドする必要があります__new__:

class CTest(tuple):
    def __new__(cls, arg):
        if type(arg) is tuple:
            return super(CTest, cls).__new__(cls, (2, 2))
        else:
            return super(CTest, cls).__new__(cls, arg)

これで期待どおりに動作します:

a = CTest((1,1))
print a
> (2, 2)

詳細については、この投稿をご覧ください。

于 2012-04-05T04:16:39.303 に答える