Что вызывает AttributeError с моим кодом Python, когда я его компилирую? - PullRequest
3 голосов
/ 02 апреля 2019

Я пытаюсь написать код, который позволяет мне передавать число, которое увеличивается или уменьшается в моем классе Square.При составлении кода мне выдается эта ошибка:

AttributeError: 'Square' object has no attribute 'change_size'. 

Введенный код:

class Square():
    def __init__(self,s1):
        self.s1=s1


def calculate_perimeter(self):
    return self.s1*4

def change_size(self,new_size):
    self.s1+=new_size


a_square= Square(100)

Взаимодействие:

>>> print(a_square.s1)
100

>>> a_square.change_size(200)

Ответы [ 3 ]

2 голосов
/ 02 апреля 2019

Имеет ли код, который вы разместили выше, идентичный отступ с вашим реальным кодом? Если это так, проблема, вероятно, вызвана тем фактом, что в Python отступ имеет значение. То есть:

class Square():
    def init(self, s1):
        self.s1 = s1
        .
        .
        .

не совпадает с

class Square():
def init(self, s1):
self.s1 = s1
.
.
.

Более подробное объяснение и примеры можно найти в руководстве по стилю PEP8 .

0 голосов
/ 02 апреля 2019

Несколько вещей:

1) использовать блоки форматирования кода, чтобы сделать ваш код более читабельным

2) убрать знак + = при изменении размера атрибута, поскольку оператор расширенного присваиваниядобавит значение к существующему значению

3) установите атрибут s1, прежде чем использовать его в классе

Попробуйте что-то вроде:

class Square():
    s1 = 0
    def init(self,s1): 
        self.s1=s1

    def calculate_perimeter(self):
    return self.s1*4

    def change_size(self,new_size): 
        self.s1 = new_size

a_square = Square()

print(a_square.calculate_perimeter())

a_square.change_size(5)

print(a_square.calculate_perimeter())
0 голосов
/ 02 апреля 2019

Пожалуйста, измените отступ,

class Square():
    def __init__(self,s1):
        self.s1=s1
    def calculate_perimeter(self):
        return self.s1*4
    def change_size(self,new_size):
        self.s1+=new_size
        return self.s1
a_square= Square(100)

Результат:

a_square.s1
100

a_square.change_size(100)

200

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, я был бы очень рад помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...