2015-09-21 4 views
0

Я пытаюсь создать программу, которая реализует мои знания классов и форматирования/базовой математики в рамках модулей, которые я создаю. Идея состояла в том, чтобы создать класс данных Merchandise (называемый Merchandise.py), а в отдельном файле - исполняемую программу с именем store_merch.py для ее проверки. Я знаю, что я должен моделировать его после того, как основные диаграммы UML, как так:Python 3.0 Классы и основы ООП с моделью 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 атрибута и стоимость инвентаря (количество * стоимость).

EDIT: Кажется, есть некоторая путаница в отношении того, что я прошу здесь, поэтому я выделил основную концепцию того, что я получаю внизу: (обратите внимание, что я пытаюсь подчеркнуть использование getter/сеттеры). Есть две программ здесь, то merchandise.py, который имеет все добытчик/сеттер и вторую программу запрашивает ввод от пользователя и запускает модуль merchandise.py

Для программы store_merch Я хочу:

создать экземпляр Merchandise для 10 молотков стоимостью 14,95 долларов США каждый.

создать еще один Merchandise объект для 6 ожерелий стоимостью 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 для количества. Возьми это оттуда!

Любая помощь приветствуется! Первый вопрос здесь, поэтому я надеюсь, что соблюдаю все правила перед публикацией !! (:

+3

Что конкретно ваш вопрос? – CoryKramer

+1

Вам не нужны геттеры и сеттеры в python, потому что вы можете использовать @property: http://www.python-course.eu/python3_properties.php – NightShadeQueen

+0

Я пытаюсь получить этот образец вывода, который выше моего кода, и Я знаю свойство, но это упражнение специально предназначено для управления и редактирования модуля класса с помощью геттеров/сеттеров, так как мне явно нужен обзор, чтобы заставить их работать. –

ответ

0

Im не слишком уверены, что вы вопрос, но я знаю, что ваш друг значит на «вы не создали второй объект для бус»

Вы инициировали 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, а не для изменения одного экземпляра.

+0

Большое спасибо R Nar Я не понял, что я не создавал новые экземпляры объекта, это было самая помощь еще :) –

Смежные вопросы