Доступ к элементам внутри класса в Python? - PullRequest
0 голосов
/ 25 февраля 2019

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

class CashRegister:
    print("Welcome to shopping world!")
    def __init__(self, price):
        self.price = price
    def addItem(self, price):
        CashRegister.totalPrice = CashRegister.totalPrice + price 
        CashRegister.itemCount = CashRegister.itemCount + 1
    @property
    def getTotal(self):
        return totalPrice
    @property
    def getCount(self):
        return itemCount
def main():
    selection = "Y"
    while selection != "N":
        selection = input("Would you like to add another item to the 
cart Y or N")
        selection = selection.upper()
        if  selection == "Y":
            price = input("What is the price of the item?")
            CashRegister.addItem(price)
        else:
            print(CashRegister.getCount)
            print(CashRegister.getTotal)
            print(selection)
main()

Вот ошибка, которую я получаю, когда выбираю yes:

TypeError: addItem() missing 1 required positional argument: 'price'

Вот вывод, который я получаю, когда выбираю no:

Welcome to shopping world!
Would you like to add another item to the cart Y or Nn
<property object at 0x0000022CFFCA2598>
<property object at 0x0000022CFFCA2548>
N

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Во-первых, вы не используете имя класса для объявления переменных в его методах: у вас есть self для этого (которое вы можете переименовать в любое, что вам нравится, но «я» - это соглашение)

во-вторых, вы должны инициализировать ваш объект класса в главной функции, иначе Python не будет знать, что делать с методами, которые вы вызываете (когда вы определяете метод в классе, первый аргумент self обозначает объект класса,поэтому каждый раз, когда вы инициализируете объект и затем вызываете метод для этого, аргумент, который вы передаете в скобках, фактически является вторым аргументом, первый из которых является самим объектом)

третий: это больше стиль, но вы на самом деле не используете CamelCase в python, за исключением имен классов, все остальное в snake_case

четвертый: += более читабелен и быстрее, чем example = example + 1

class CashRegister(object) :

    def __init__(self) :
        self.total_price = 0
        self.item_count = 0

    def add_item(self, price) :
        self.total_price += int(price)
        self.item_count += 1

    def get_total(self) :
        return self.total_price

    def get_count(self) :
        return self.item_count

def main() :
    register = CashRegister()
    selection = True

    while selection :
        selection = input("Would you like to add another item to the cart Y or N\n\t").upper()

        if selection == "Y" :
            price = input("What is the price of the item?\n\t")
            register.add_item(price)

        else :
            print(register.get_total())
            print(register.get_count())
            print(selection)
            selection = False

main()

это то, как я, вероятно, сделал бы это, я убрал декораторы @property, потому что я не знаю, действительно ли вам они там нужны, вы можете просто позвонить вods с квадратными скобками () в конце, чтобы получить то, что вы хотите

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

0 голосов
/ 25 февраля 2019

у вас много ошибок, вам нужно определить итоговую цену и количество товаров в себе, вам нужно определить переменную с помощью класса кассовых аппаратов

class CashRegister:
    print("Welcome to shopping world!")
    def __init__(self):
        self.totalPrice=0
        self.itemCount=0
    def addItem(self, price):
        self.totalPrice = self.totalPrice + price 
        self.itemCount = self.itemCount + 1
    @property
    def getTotal(self):
        return self.totalPrice
    @property
    def getCount(self):
        return self.itemCount
def main():
    selection = "Y"
    box=CashRegister()
    while selection != "N":
        selection = input("Would you like to add another item to thecart Y or N\n\t:")
        selection = selection.upper()
        if  selection == "Y":
            price = input("What is the price of the item?\n\t:")
            box.addItem(int(price))
        else:
            print(box.getCount)
            print(box.getTotal)
            print(selection)
main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...