2016-10-06 1 views
0

Я работаю над этим классом Money, и все работает отлично вплоть до умножения. Я продолжаю получать ошибку атрибута и не могу понять, где я ошибаюсь. Умножение имеет тип float.Я продолжаю получать ошибку атрибута 'int' объект не имеет атрибута 'dollars'

class Money: 
    def __init__(self, d, c): 
     self.dollars = d 
     self.cents = c 

    def __str__(self): 
     return '${}.{:02d}'.format(self.dollars, self.cents) 

    def __repr__(self): 
     return 'Money({},{})'.format(repr(self.dollars), self.cents) 

    def add(self, other): 
     d = self.dollars + other.dollars 
     c = self.cents + other.cents 
     while c > 99: 
      d += 1 
      c -= 100 
     return Money(d,c) 

    def subtract(self, other): 
     d = self.dollars - other.dollars 
     c = self.cents - other.cents 
     while c < 0: 
      d -= 1 
      c += 100 
     return Money(d,c) 

    def times(self, mult): 
     d = self.dollars * mult.dollars 
     c = self.cents * mult.cents 
     while c > 99: 
      d *= 1 
      c *= 100 
     return Money(d,c) 


>>> m2 = Money(10,10) 
>>> m2.times(3) 
Traceback (most recent call last): File "<pyshell#51>", line 1, in <module> m2.times(3) 
    File "/Users/kylerbolden/Desktop/hw2.py", line 67, in times 
    d = float(self.dollars) * float(mult.dollars) 
AttributeError: 'int' object has no attribute 'dollars' 
+0

, пожалуйста, измените свой кодовый блок. первая строка вашего кода, похоже, была отрублена от остальных! – Mangohero1

+1

Пожалуйста, ** ** ПОЖАЛУЙСТА **, сообщите точную ошибку, которую вы получаете. Или, по крайней мере, показать, как вы используете предоставленные вами функции. Без этого было бы угадывающей игрой, пытающейся понять, какая функция вызывает ошибку. –

+0

>>> m2 = Деньги (10,10) >>> m2.times (3) Traceback (самый последний вызов последнего): Файл "", строка 1, в m2.times (3) Файл «/Users/kylerbolden/Desktop/hw2.py», строка 67, в раз d = float (self.dollars) * float (mult.dollars) AttributeError: объект 'int' не имеет атрибута 'dollars' –

ответ

3

В m2.times(3), вы пропускание int3 методы times. В методе времени, однако, вы пытаетесь умножить на mult.dollars, а не dollars (3), который вы фактически передали.

mult.dollars не работает подобный self.dollars будет. Фактически, это не действительная конструкция.

Попробуйте

>>> class Money: 
...  def __init__(self, d, c): 
...   self.dollars = d 
...   self.cents = c 
...  def times(self, mult): 
...   d = self.dollars * mult 
...   c = self.cents * mult 
...   while c > 99: 
...    d *= 1 
...    c *= 100 
...   return Money(d, c) 

Вы, очевидно, придется изменить остальную часть вашего кода, а также.

Кажется, что вы хотите вернуть новый объект Money вместо баланса с каждым из этих методов, но, чтобы продемонстрировать точку, я сделал выше:

>>> class Money: 
...  def __init__(self, d, c): 
...   self.dollars = d 
...   self.cents = c 
...  def times(self, mult): 
...   d = self.dollars * mult 
...   c = self.cents * mult 
...   while c > 99: 
...    d *= 1 
...    c *= 100 
...   return (d,c) 
... 
>>> m2 = Money(10, 10) 
>>> m2.times(3) 
(30, 30) 

Edit: Хорошо, выше не кажется чтобы быть тем, что вы ищете, но я оставлю его для людей, столкнувшихся с подобной ошибкой. Что вам нужно исправить в коде - это объект mult, который вы пытаетесь передать. Ваши методы add и subtract имеют одинаковые параметры: self и other, где, например, other является еще одним экземпляром класса Money. Итак, вы пытаетесь размножить, добавить или вычесть разные балансы, в основном? В этом случае измените mult.dollars и mult.cents на other.dollars и other.cents, чтобы вы могли получить доступ к этим атрибутам для другого объекта Money.

После изменения, которые:

>>> class Money: 
...  def __init__(self, d, c): 
...   self.dollars = d 
...   self.cents = c 
...  def times(self, other): 
...   d = self.dollars * other.dollars 
...   c = self.cents * other.cents 
...   while c > 99: 
...    d *= 1 
...    c *= 100 
...   return Money(d,c) 
... 
>>> m2 = Money(2, 3) 
>>> m3 = Money(4, 5) 
>>> m2.times(m3) 
Money(8,15) 

Кроме того, вы можете посмотреть в d *= 1 и c *= 100 линий, но это должно ответить на ваш первый вопрос.

+0

У меня нет проблемы с другими функциями, только функция умножения. и когда я попробую ваш метод, он говорит, что доллары не определены. –

+0

Убедитесь, что все написано правильно. – blacksite

+1

Как работают другие функции? Например, в вашей функции добавления параметр 'other' в вашем аргументе передается как тип' int', я предполагаю, и вы вызываете 'other.dollars' в определении функции. У него нет атрибута «доллары». Имеет ли это смысл? – Mangohero1