1

オブジェクトのリストがあります。最近のバージョンの Python に組み込まれている文字列フォーマット機能を使用して、いくつかのインスタンス変数を明らかにする、リスト内のオブジェクトの意味のある表現を出力しようとしています。Python 3.3.0 を使用しています。

__str__リスト内のオブジェクトのクラスにメソッドを定義しました。個々のオブジェクトを印刷しようとすると、__str__メソッドによって返された表現が得られます。__str__しかし、リスト全体を印刷しようとすると、メソッドを定義していないかのように、一般的な表現が得られます。次に例を示します。

class CustomClass:
    def __init__(self):
        self.instanceVar = 42

    def __str__(self):
        return "{} (instanceVar = {})".format(self.__class__.__name__, self.instanceVar)

testObject = CustomClass()

print("{}".format(testObject))
# CustomClass (instanceVar = 42)

print("{}".format([testObject]))
# [<__main__.CustomClass object at 0x1006cbed0>]

2番目のprintステートメントで次のようなものを印刷するにはどうすればよい[CustomClass (instanceVar = 42)]ですか? 正しいフォーマット文字列をprint関数に渡すだけでこれを行うことは可能ですか、それともそれよりも複雑ですか?

4

2 に答える 2

5

__repr__そのメソッドを定義する必要があると思います

class CustomClass:
     def __str__: 
         return "whatever"
     def __repr__:
         return str(self)
于 2013-05-16T19:14:14.440 に答える
3

リストを印刷すると、リストrepr内のオブジェクトの が取得されます。したがって、目的の形式を取得するには、__repr__メソッドを定義します。

を定義せずに を定義すると、__str__Pythonがオブジェクトの を見つけようとするたびに の代わりに が使用されます。したがって、両方を定義したくない場合は、両方を定義する必要はありません。__repr____repr____str__str

class CustomClass:
    def __init__(self):
        self.instanceVar = 42

    def __repr__(self):
        return "{} (instanceVar = {})".format(self.__class__.__name__, self.instanceVar)
于 2013-05-16T19:14:25.387 に答える