3

int、、およびその他の不変型のlist継承がどのように機能するかを知りたいです。string

基本的に、私は次のようなクラスを継承します。

class MyInt(int):
    def __init__(self, value):
        ?!?!?

理解できないようですが、設定されているように値を設定するにはどうすればよいintですか?そうするとself.value = value、私のクラスは次のように使用されます。

mi = MyInt(5)
print(mi.value) # prints 5

私はそれをこのように使いたいのですが:

mi = MyInt(5)
print(mi) # prints 5

どうすればよいですか?

4

1 に答える 1

8

をサブクラス化できますがint不変であるため、.__new__()コンストラクター フックを提供する必要があります。

class MyInt(int):
    def __new__(cls, value):
        new_myint = super(MyInt, cls).__new__(cls, value)
        return new_myint

__new__サブクラスを適切に作成するには、基本コンストラクターを呼び出す必要があります。

Python 3 では、引数をsuper()完全に省略できます。

class MyInt(int):
    def __new__(cls, value):
        new_myint = super().__new__(cls, value)
        return new_myint

もちろん、これは、valueに渡す前にsuper().__new__()操作するnew_myintか、戻る前にさらに操作したいことを前提としています。それ以外の場合は、__new__メソッド全体を削除して、これを として実装することもできますclass MyInt(int): pass

于 2013-02-26T09:52:47.290 に答える