Как вы умножаете значения внутри класса в Python?

class bread:
    def __init__(self,grain,cost,number):
        self.grain=(grain)
        self.cost=int(cost)
        self.number=int(number)
    def price(self):
        p=self.cost*self.number
        print(p)

apple=bread("wholemeal",int(2),int(12))
print(apple.grain,apple.cost,apple.number)
print (apple.price)

После ввода этого блока кода я должен ожидать увидеть 24, но вместо этого получаю:

bound method bread.price of <main.bread object at 0x05CC7430>>

Я новичок в oop и начинаю экспериментировать, но не могу найти решения.

цена - это функция, а не свойство

mehulmpt 26.05.2018 23:55

Прочтите про Классы.

Peter Wood 27.05.2018 00:02
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
1 889
3

Ответы 3

Вам необходимо вызвать в price:

apple.price()

Однако поведение переменных атрибутов с помощью методов может быть достигнуто с помощью property:

class bread:
   def __init__(self,grain,cost,number):
    self.grain=grain
    self.cost=cost
    self.number=number
   @property
   def price(self):
     return self.cost*self.number

 apple=bread("wholemeal",2, 12)
 print(apple.price)

В этом случае вы, похоже, не хотите иметь дело с объектом класса, а просто хотите получить результат. Это можно сделать так:

class bread:

    def __init__(self, grain, cost, number):

        self.grain = (grain)
        self.cost = int(cost)
        self.number = int(number)

        return self.price()

    def price(self):
        p = self.cost * self.number
        print("%s : %d" % (self.grain, p))

bread("wholemeal", 2, 12)

Как новичок, вы не должны слишком сильно беспокоиться о таких вещах, как property, но старайтесь сделать его максимально простым (и подробным). Кроме того, поскольку вы вводите тип зерна, я предполагаю, что вы хотите распечатать его вместе со значением.

Чтобы распаковать изменения, которые я внес в ваш код в качестве примера некоторых базовых практик кодирования:

  • обратите внимание на интервал между функциями
  • обратите внимание на расстояние между отдельными элементами
  • обратите внимание, как вывод производится с помощью print ()

Как только все это будет сделано, все, что нам нужно сделать, это сделать вызов, который мы в противном случае должны были бы делать каждый раз внутри __init__. Удачи и получайте удовольствие от изучения Python!

Когда вы печатаете функцию в конце, вам действительно нужно вызвать функцию. В настоящее время вы просто получаете экземпляр метода внутри объекта. Но вы должны использовать круглую скобку () для вызова функции при ее печати. Вам также не нужно печатать вызов функции, чтобы получить 24, поскольку вы уже распечатываете вывод числа и стоимости в своей функции. Но если вы действительно хотите распечатать функцию, вы можете использовать возвращаемое значение в своей функции. Вот пример ниже:

class bread(object):

   def __init__(self, grain, cost, number):
      self.grain = grain
      self.cost = cost
      self.number = number

   def price(self):
      price = self.cost * self.number
      return price

apple=bread("wholemeal", 2, 12)

print(apple.price())

Обратите внимание, что в конце кода мы фактически вызвали функцию () при ее печати. Затем вы распечатаете возвращаемое значение функции. Если вы хотите просто распечатать значение внутри функции, вы можете вызвать функцию в нижней части кода, не печатая ее следующим образом:

apple.price()

а затем выберите поместить заявление о печати в метод цены. Ваш вывод из кода выше 24:

24

Другие вопросы по теме