1. ホーム
  2. python

[解決済み] Pythonのリストで__str__について迷う [duplicate].

2022-08-18 07:18:57

質問

Java のバックグラウンドから来た私は、以下のことを理解しています。 __str__ は Python 版の toString のようなものだと理解しています (Python が古い言語であることは認識していますが)。

というわけで、私は小さなクラスと __str__ メソッドを以下のように定義しました。

class Node:

    def __init__(self, id):
        self.id = id
        self.neighbours = []
        self.distance = 0


    def __str__(self):
        return str(self.id)

それから、いくつかのインスタンスを作成します。

uno = Node(1)    
due = Node(2)    
tri = Node(3)    
qua = Node(4)

さて、これらのオブジェクトの1つを表示しようとしたときに期待される動作は、それに関連する値が表示されることです。これもまた起こることです。

print uno

イールド

1

しかし、以下のようにすると

uno.neighbours.append([[due, 4], [tri, 5]])

で、次に

print uno.neighbours

私は

[[[<__main__.Node instance at 0x00000000023A6C48>, 4], [<__main__.Node instance at 0x00000000023A6D08>, 5]]]

私が期待したところ

[[2, 4], [3, 5]]

私は何を見逃しているのでしょうか?また、それ以外にどんなヒヤヒヤすることをやっているのでしょうか?)

どのように解決するのですか?

Pythonには、オブジェクトを文字列に変換する方法が2種類あります。 str()repr() . オブジェクトを印刷する場合は str() オブジェクトを含むリストを印刷する場合は str() を使いますが、リスト自体には list.__str__()repr() を呼び出す。

ということで __repr__() . 単純に

__repr__ = __str__

をクラス本体の最後に書くとうまくいきます。