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 и начинаю экспериментировать, но не могу найти решения.
Прочтите про Классы.






Вам необходимо вызвать в 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, но старайтесь сделать его максимально простым (и подробным). Кроме того, поскольку вы вводите тип зерна, я предполагаю, что вы хотите распечатать его вместе со значением.
Чтобы распаковать изменения, которые я внес в ваш код в качестве примера некоторых базовых практик кодирования:
Как только все это будет сделано, все, что нам нужно сделать, это сделать вызов, который мы в противном случае должны были бы делать каждый раз внутри __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
цена - это функция, а не свойство