Я пытаюсь создать программу, которая реализует мои знания классов и форматирования/базовой математики в рамках модулей, которые я создаю. Идея состояла в том, чтобы создать класс данных 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 для количества. Возьми это оттуда!
Любая помощь приветствуется! Первый вопрос здесь, поэтому я надеюсь, что соблюдаю все правила перед публикацией !! (:
Что конкретно ваш вопрос? – CoryKramer
Вам не нужны геттеры и сеттеры в python, потому что вы можете использовать @property: http://www.python-course.eu/python3_properties.php – NightShadeQueen
Я пытаюсь получить этот образец вывода, который выше моего кода, и Я знаю свойство, но это упражнение специально предназначено для управления и редактирования модуля класса с помощью геттеров/сеттеров, так как мне явно нужен обзор, чтобы заставить их работать. –