2

私はクラスをインスタンス化しており、単純に print を使用してオブジェクトをダンプしたいと考えています。これを行うと、ある種のオブジェクトIDを取得しているようです。「print ObjectName」を発行すると、結果がオブジェクトの属性だけになることはありませんか? これが私がやっていることの例です:

class Car:
    def __init__(self, color, make, model):
        self.color = color
        self.make = make
        self.model = model

    def getAll():
        return (self.color, self.make, self.model)


mycar = Car("white","Honda","Civic")
print mycar

これを実行すると、次の結果が得られます。

<__main__.Car instance at 0x2b650357be60>

色、メーカー、モデルの値も表示されると思います。次の方法で個別に印刷するかどうかはわかっています。

print mycar.color,mycar.make,mycar.model

それは出力しました:

white Honda Civic

私が期待するのと同じように。「print mycar」が属性値ではなくインスタンス ID を出力するのはなぜですか?

4

2 に答える 2

3

.__str__()クラスにメソッドを定義します。カスタム クラス インスタンスを出力するときに呼び出されます。

class Car:
    def __init__(self, color, make, model):
        self.color = color
        self.make = make
        self.model = model

    def __str__(self):
        return ' '.join((self.color, self.make, self.model))

デモ:

>>> mycar = Car("white","Honda","Civic")
>>> print mycar
white Honda Civic

さらに、.__repr__()メソッドを実装して、デバッガーが使いやすいインスタンスの表現を提供することもできます。

于 2013-03-29T16:27:47.873 に答える
2

クラスオブジェクトの「わかりやすい」値を実装__str__して取得する必要があります。__repr__

詳細については、こちらをご覧ください。

__repr__はオブジェクトの正式な文字列表現であり、によって呼び出されrepr()__str__は非公式の文字列表現であり、によって呼び出されますstr()

于 2013-03-29T16:28:56.250 に答える