新手求教python 面向對象編程的一個問題?

新手,一直在學習python,問題來自學習的教材:《python 核心編程2th》一書,第13章習題11:

13-11. 電子商務。

你需要為一家B2C(商業到消費者)零售商編寫一個基礎的電子商務引擎。你需要寫一個針對顧客

的類User, 一個對應存貨清單的類Item, 還有一個對應購物車的類叫Cart. 貨物放到購物車裡,顧

客可以有多個購物車。同時購物車裡可以有多個貨物,包括多個同樣的貨物。

我分別定義了3個類:

在Item類里建立了一個字典格式的類屬性用來存放商品的名稱和數量,並通過classmethod方法實現在不同的實例里對商品增刪改操作。

在Cart類里同樣保存一個類屬性來維護本購物車內的商品名稱、數量,並用其他方法實現增刪改等操作

在User類里主要實現一些動作,比如把商品放進、取出購物車裡,Item里的字典、Cart里的字典對應的數據項的值都有相應的變動,放進購物車的數量不能超過Item里對應的值等等。

現在問題是:

1,我對類方法的理解對不對?我的理解主要通過類方法,在不同的Item實例之間保證值能夠被傳遞。實際測試過程沒發現問題,但是看書的過程中類方法和靜態方法沒怎麼看懂,所以沒有信心。

2,Cart 里維護的那個 購物車裡商品:數量對應的字典表,我該怎麼實現?如果通過類方法實現,那麼就相當於不同的用戶之間共享了購物車。如果通過構造函數來實現,那麼同一個用戶反覆調用同一個Cart實例,值會變化。

我之前已經google過python 面向對象編程 和類方法等對應的內容了,但是沒有找到答案,謝謝指點。


你先跳過面向對象,你現在理解不了的,以後慢慢來,急不得

至於題目。。你想太多了,並且完全搞錯了

按照你的描述應該是這樣的

class User:
carts = []

class Item:
name = whatever
# ...

class Cart:
items = []

# 作業就做完了,就這麼簡單。。。
# 然後你要用的時候是這麼用的
# 題目沒說怎麼用,我隨便給你演示一下

monkey = User()
cart = Cart()

def item_init(self, name):
self.name = name

setattr(Item, __init__, item_init)

banana = Item(banana)
apple = Item(apple)
bag = Item(bag)

# buy未定義
monkey.buy(banana)
monkey.buy(banana)
monkey.buy(banana)
monkey.buy(apple)
monkey.buy(bag)

是不是發現自己想歪了?正常,你需要更多的練習


百度一下「多對多關係」和「一對多關係」「多對一關係」

這些要用到集合來實現 不知道你學了沒有 其實意思和樓上差不多(他是用數組罷了)


推薦閱讀:

為什麼有的人連OO、FP等基本的語言概念都搞不清楚,卻整天吹噓OO/FP的好處?
我有很多隻筆(鉛筆、圓珠筆),但是我聲明一個類「筆」作為各種筆的父類有什麼意義呢?
為何少部分語言如C++和python要堅持引入多繼承?
Smalltalk 的 Live Programming 是怎樣實現的?

TAG:面向對象編程 |