クラスを定義してそのインスタンスを作成するときに、シェルにインスタンス名を入力すると、メモリの場所が返されます。驚くことではありませんが、クラスの名前をシェルに入力すると実際にメモリの場所以外のものが返されるようにクラスを定義する方法を知っている人はいますか?
例:
>> import numpy as np
>> foo = np.array([1,2,3])
>> foo
>> array([1, 2, 3])
このようなことが出来れば良いのですが。
クラスを定義してそのインスタンスを作成するときに、シェルにインスタンス名を入力すると、メモリの場所が返されます。驚くことではありませんが、クラスの名前をシェルに入力すると実際にメモリの場所以外のものが返されるようにクラスを定義する方法を知っている人はいますか?
例:
>> import numpy as np
>> foo = np.array([1,2,3])
>> foo
>> array([1, 2, 3])
このようなことが出来れば良いのですが。
これが__repr__
メソッドの目的です。
>>> class point(object):
... def __init__(self, x, y):
... self.x = x
... self.y = y
...
... def __repr__(self):
... return "point(%d, %d)" % (self.x, self.y)
>>> x = point(3, 4)
>>> x
point(3, 4)
カスタム__repr__
実装がない場合は、質問で説明していることを正確に確認できます。
>>> class defaultPoint(object):
... def __init__(self, x, y):
... self.x = x
... self.y = y
...
>>> p = defaultPoint(0, 3)
>>> p
<__main__.defaultPoint object at 0x16767b0>
デフォルトでは、python クラスのマジック メソッドが用意されています。これらのマジック メソッドのうちの 2 つが、このことを行うのに役立ちます。
__str__
__repr__
reprを使用すると、あなたが望むものを達成できます。strを使用すると、print ステートメントの使用中にそのメソッドで返されるものが返されます
これらのメソッドから表示したいものを返す必要があることに注意してください
__repr__
クラスにメソッドを定義する必要があります。