-1
class Item:
    def __init__(self, name, price, kind):
        self.name = name 
        self.price = price
        self.kind = kind


    def getPrice(self):
        return self.price

    def getName(self):
        return self.name 

    def getKind(self):
        return self.kind

class Cart:
    def __init__(self):
        self.list = []
        pass

    def addItem(self, item):
        self.list.append(item)

    def getTotalsByKind(self, kind):
        total = 0
        for i in self.list:
            if i.getKind() == kind:
                total += i.getPrice()
        t = '{:.2f}'.format(total)
        print "The total for %s items is %s" %(kind, t)         
4

3 に答える 3

4

メソッドの戻り値を出力しています。

メソッド呼び出しprintの前からステートメントを削除します。.getTotalsByKind()メソッド自体がすべての印刷を行います。

メソッドには明示的なステートメントがありませんreturn。つまり、デフォルトの戻り値Noneが使用されます。

>>> def foo():
...     # Nothing is returned in this function
...     print 'Bar!'
... 
>>> print foo()
Bar!
None
>>> foo()
Bar!

より良い代替手段は、メソッドが出力する文字列を返すようにすることです。

def getTotalsByKind(self, kind):
    total = 0
    for i in self.list:
        if i.getKind() == kind:
            total += i.getPrice()
    t = '{:.2f}'.format(total)
    return "The total for %s items is %s" %(kind, t)         

返された文字列を印刷するだけでなく、さまざまなことができるようになりました。

于 2013-09-25T20:35:16.640 に答える
2

文字列を出力するのではなく、getTotalsByKind 返すようにする必要があります。これを行うには、次の行を作成します。

print "The total for %s items is %s" %(kind, t)

このような:

return "The total for %s items is %s" %(kind, t)

これで、 の結果を印刷するgetTotalsByKindと機能します。

関数は、デフォルトでは、返さNoneずに自分自身の最後に到達した場合に返されます。そして、(あなたがしなければならない)printwithを使用することで、 Python に の戻り値を出力するように指示しています。これはです。getTotalsByKindgetTotalsByKindNone

于 2013-09-25T20:37:09.063 に答える
1

コードのこの部分は表示されていませんが、私の推測では、 を実行しているprint cart.getTotalsByKind(...)ため、Python にその関数の戻り値を出力するように指示しています。しかし、何も返さないため、 を返しますNone。代わりに、そのメソッドは合計を出力します。

不適切な名前のメソッドの犠牲になりました:合計が返さgetTotalsByKindれることを意味しますが、合計は1 つしかなく、返される代わりに出力されます。代わりにこのメソッドに名前を付けます。または、名前を付けて、発信者に印刷 (およびフォーマット) を行わせます。次に、メソッドは次のようにはるかに簡単に記述できます。printTotalByKindgetTotalByKind

def getTotalByKind(self, kind):
    return sum(item.price for item in self.list if item.kind == kind)

これはあなたの質問とは関係ありませんが、ゲッター メソッドは完全に不要であり、おそらく削除する必要があります。item.price同じことを行うために関数を呼び出すオーバーヘッドは必要ありません。ピンジ

于 2013-09-25T20:37:57.873 に答える