使用UML模型的Python 3.0类和OOP基础知识?

时间:2015-09-21 18:47:01

标签: python class loops math

我正在尝试制作一个程序,在我创建的模块中练习我的类和格式/基本数学知识。我们的想法是创建一个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对象的数量设置器。从那里拿走它!

感谢任何和所有帮助!关于这里的第一个问题,所以我希望在发布前遵守所有规则!! (:

1 个答案:

答案 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对象实例,而不是更改单个实例。