0
class SList:
    def __init__(self):
        self.s1 = ['hey']
    def take(self, item):
        self.s1 += [item]
        return self.s1
    def size(self):
        size = len(self.s1)
        return size

if __name__ == "__main__" :
    s1 = SList()
    print('hello')
    s1.take(33)
    s1.take(42)
    s1.take(55)
    s1.size()
    print(s1)
    print(s1.size())

クラスにあまり慣れていないので、何よりも概念の証明のためにこれを書いたので、私はそれに慣れることができました。これからの出力が次のようになる理由がわかりません。

hello

<__main__.SList object at 0x3323ed0>

4

helloとは私が望む方法ですが、出力する必要がある場合4、 の 16 進値を取得するようです:s1s1['hey', 33, 42, 55]

s1正しいリストを出力するにはどうすればよいですか?

4

3 に答える 3

0

reprまたはのオーバーライドを追加しますstr

class SList:
    def __init__(self):
        self.s1 = ['hey']

    def take(self, item):
        self.s1 += [item]
        return self.s1

    def size(self):
        size = len(self.s1)
        return size

    def __repr__(self):
        return repr(self.s1)

if __name__ == "__main__" :
    s1 = SList()
    print('hello')
    s1.take(33)
    s1.take(42)
    s1.take(55)
    s1.size()
    print(s1)
    print(s1.size())

あなたの場合はこれで十分です:

こんにちは

[「ねえ」、33、42、55]

4

に関するドキュメントから__repr__

オブジェクトの「正式な」文字列表現を計算するために、repr() 組み込み関数および文字列変換 (逆引用符) によって呼び出されます。可能であれば、これは同じ値を持つオブジェクトを再作成するために使用できる有効な Python 式のように見えるはずです (適切な環境が与えられた場合)。これが不可能な場合は、<...便利な説明...> の形式の文字列を返す必要があります。戻り値は文字列オブジェクトでなければなりません。クラスがrepr ()を定義し、 str () を定義しない場合、そのクラスのインスタンスの「非形式的な」文字列表現が必要な場合にもrepr () が使用されます。

これは通常、デバッグに使用されるため、情報が豊富で明確な表現であることが重要です。

完全を期すために、オーバーライドすることもできます__str__:

オブジェクトの「非形式的な」文字列表現を計算するために、str() 組み込み関数および print ステートメントによって呼び出されます。これは、有効な Python 式である必要がないという点でrepr () とは異なります。代わりに、より便利で簡潔な表現を使用できます。戻り値は文字列オブジェクトでなければなりません。

于 2013-11-03T13:39:59.450 に答える
0

それ以外の

print(s1)

使用する

print(s1.s1)

元のケースと同様に、SList クラスのインスタンス オブジェクトを出力しています。

于 2013-11-03T13:41:19.183 に答える
0

str取得したいものを出力するようにメソッドを書き直す必要があると思います。

于 2013-11-03T13:39:10.850 に答える