我正在尝试制作一个程序,在我创建的模块中练习我的类和格式/基本数学知识。我们的想法是创建一个Merchandise
数据类(称为Merchandise.py
),并在一个单独的文件中创建一个名为store_merch.py
的可执行程序来测试它。我知道我应该在基本的UML图之后对其进行建模:
Merchandise
__item
__quantity
__cost
__init__(item,quantity,cost)
set_item(item)
set_quantity(quantity)
set_cost(cost)
get_item()
get_quantity()
get_cost()
get_inventory_value()
__str__()
我知道get_inventory_value()
方法会以货币格式计算/打印商品的价值,而__str()__
方法会返回一个字符串,显示所有3个属性和库存值(数量*成本)。
编辑:对于我在这里提出的要求似乎存在一些困惑,所以我突出了我在下面所得到的核心概念:(注意,我试图强调使用getter / setter)。这里有两个程序,merchandise.py包含所有getter / setter,第二个程序要求用户输入并运行merchandise.py模块
对于我想要的store_merch
计划:
为10个锤子创建Merchandise
个实例,每个花费14.95美元。
为6条项链创建另一个Merchandise
对象,每个价格为799.99美元。
运行两个对象的__str__
方法。
提示用户输入锤子对象的新数量,然后使用setter方法更改此属性。
提示用户输入项目对象的新费用,然后使用setter方法更改此属性。
再次运行__str__
方法验证更改。
也会显示每个对象的广告资源价值。
SAMPLE OUTPUT
锤子,10 @ $ 14.95
项链,6 @ $ 799.99
输入硬件12的新数量
输入珠宝的新费用659
锤子,12 @ $ 14.95
库存价值:$ 179.40
项链,6 @ $ 659.00
库存价值:$ 3,954.00
我到目前为止的两个程序如下:
## first program "merchandise.py" with getters/setters to use in next program:
class Merchandise:
def __init__(self,item,quantity,cost):
self.__item = item
self.__quantity = quantity
self.__cost = cost
def set_item(self,item):
self.__item = item
def set_quantity(self,quantity):
self.__quantity = quantity
def set_cost(self,cost):
self.__cost = cost
def get_item(self):
return self.__item
def get_quantity(self):
return self.__quantity
def get_cost(self):
return self.__cost
def __str__(self):
s = self.__item + ' ' + str(self.__quantity)
s += ' @ ' + str(self.__cost)
return s
## --------SEPARATE PROGRAM TO RUN MERCHANDISE MODULE BELOW----------
## merchandise input program
### import the merchandise module
import merchandise
def main():
### make a new merchandise? instance
store_merchandise = merchandise.Merchandise('hammer',10,14.95)
### display status of merchandise object
print(store_merchandise)
### change Item, Quantity, and Cost
store_merchandise.set_item('necklaces')
store_merchandise.set_quantity(6)
store_merchandise.set_cost(799.99)
### display status of store merchandise object
print(store_merchandise)
item2 = input('Enter new quantity for hardware ') # prompt user for new quantity
### initiate another merchandise
### change Item, Quantity, and Cost
store_merchandise.set_item('hammer')
store_merchandise.set_quantity(item2)
store_merchandise.set_cost(14.95)
### display status of store merchandise object
print(store_merchandise)
necklace2 = input('Enter new cost for necklaces ') # prompt user for new quantity
### initiate another merchandise
### change Item, Quantity, and Cost
store_merchandise.set_item('necklace')
store_merchandise.set_quantity(necklace2)
store_merchandise.set_cost(659.00)
### display status of store merchandise object
print(store_merchandise)
### add the new inventory value total and print the sum
print(store_merchandise + format(store_merch.get_cost(), ',.2f'), sep='')
main()
目前它只重命名锤子实例及其属性并正确提示用户,打印锤子和项链的新价格/数量,但不是我想要的方式。 我的一位朋友帮助指出了一些我做错的事情,但我老实说,如何创建更多实例并调用以前的实例,同时添加一个属性他们每个人在一起并显示结果:
1。你没有为项链创造第二个物体。您重新分配了硬件对象的属性。你没有使用输入。 这... store_merchandise.set_quantity(12) 应该是... store_merchandise.set_quantity(item2)
2。在您输入新数量的锤子时,您忘记使用int()函数。
第3。启动store_merch =的行是另一个罪魁祸首。你忘了使用商品。正如你在主要开始时所做的那样。但无论如何,你不应该创建一个名为store_merch的新实例。您应该使用store_merchandise对象的数量设置器。从那里拿走它!
感谢任何和所有帮助!关于这里的第一个问题,所以我希望在发布前遵守所有规则!! (:
答案 0 :(得分:0)
我不太确定你的问题是什么,但我知道你的朋友意味着什么"你没有为项链创造第二个物品"
您启动store_merchandise作为商品对象,然后不断使用set_x(x)来更改其属性。
相反,您应该通过启动另一个变量来实例化对象的新实例,而不是更改原始属性。这可以在您启动第一个的同时完成,但使用不同的名称。
store_merchandise = merchandise.Merchandise('hammer',10,14.95) //initiate the first object properties 'hammer',12,14.95
store_merchandise2 = merchandise.Merchandise('necklaces',6,799.99) //initiate the second object with properties 'necklaces',6,799.99

然后您可以像以前一样访问这些内容,在需要时单独调用每个内容。这样,您就有两个单独的Merchandise对象实例,而不是更改单个实例。