2012-11-16 4 views
0

파이썬에서 인벤토리 클래스를 디자인 중이며, 상점에 재고가있는 항목을 추적하고 새 항목을 추가하고 삭제하는 것으로되어 있습니다.클래스 내의 글로벌 사전

문제는 수업 내 "항목"정의에서 비롯됩니다. 사전에 다른 항목을 추가하면 해당 항목이 대체되어 추가되지 않습니다. 도와 줘서 고마워! 왜 그것을 추가하지 않을까요 ???

class Store: 

    def __init__(self, name, email): 
     self.name = name 
     self.email = email 

    # two accessor methods 
    def getName(self): 
     return self.name 

    def getEmail(self): 
     return self.email 

    # makes print work correctly 
    def __str__(self): 
     return str(self.name) 

    # items 
    def additem(self, item, price): 
     global items 
     items = {} 
     self.item = str(item) 
     self.price = float(price) 
     items[self.item] = price 

    def delitem(self, item): 
     items.remove(item) 

    def displayinventory(self): 
     return items 

답변

5

당신은 새로운 빈 사전에 당신이 additem를 호출 할 때마다 items 설정된다. 따라서 새 항목을 추가하기 전에 항상 그 위치에있는 내용을 지 웁니다. 대신 함수 외부에 items = {}을 설정하십시오. self.item = str(item) (그리고 가격도 동일)을 수행 할 필요가 없습니다. 기존 self.item을 덮어 쓰게되므로 가장 최근에 액세스 할 수 있습니다.

사실, 당신이 아마해야 할 것은 items이 같은 객체의 속성을 만들 수 있습니다 :

class Store: 

    def __init__(self, name, email): 
     self.name = name 
     self.email = email 
     self.items = {} 

    # rest of your code here. . . 

    def additem(self, item, price): 
     self.items[str(item)] = float(price) 

    def delitem(self, item): 
     del self.items[str(item)] 

    def displayinventory(self): 
     return self.items 

당신이 그것을하고있는 방법, 모두가 공유됩니다 하나의 글로벌 items 딕셔너리가있다 백화점. 위의 방법은 각 상점에 자체 품목 dict을 제공하므로 자체 품목에 대한 자체 기록을 보관할 수 있습니다.

+0

와우. 천재. BrenBarn에게 감사드립니다. 저는 파이썬을 처음 접하면서 배우려고합니다. 완전히 굉장한. –