Объект 'int' не имеет атрибута 'get_length' error - PullRequest
0 голосов
/ 08 марта 2020
 class Box:
    def __init__(self, length, width):
        self.length = length
        self.width = width
    def get_length(self):
        return self.length
    def get_width(self):
        return self.width    
    def double(self):
        self.length = 2*(self.length)
        self.width = 2*(self.width)
        return self.length
        return self.width

У меня есть эта проблема ниже.

self.assertEqual(b1.double().get_length(),32)  
AttributeError: 'int' object has no attribute 'get_length'

Эти атрибуты length и width должны быть закрытыми и доступными только через геттеры. Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 08 марта 2020

Ваш метод double() имеет два оператора return, 2-й из которых никогда не будет выполнен, так что это проблема номер 1.

Вторая проблема, кажется, вы хотите вернуть новый объект Box с удваивайте значения, однако вы удваиваете значения current one и затем возвращаете длину (int).

Это, вероятно, то, что вы пытаетесь сделать:

def double(self):
    return Box(self.__length * 2, self.__width * 2)

Таким образом Box(1, 2).double().get_length() даст вам то, что вы ожидаете - 2.


В целом, кажется, что вы новичок в python. В отличие от других языков, в python, как правило, нет необходимости иметь «приватные» атрибуты (к ним можно получить доступ, если вы действительно хотите). Обычно достаточно просто использовать self.length и self.width. Если вы когда-нибудь захотите добавить логи c при доступе, используйте декоратор @property.

Дополнительная информация .

0 голосов
/ 08 марта 2020

Метод double() возвращает целое число (self.length). Вы пытаетесь вызвать метод get_length() этого номера, и он не имеет его. Предлагаемое решение: заменить return self.length на return self.

...