在编译Python代码时,是什么导致了AttributeError?

2024-04-25 01:54:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写代码,允许我传入一个在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)

Tags: no代码selfnewsizeobjectdef错误
3条回答

几件事:

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())

你上面贴的代码和你的实际代码有相同的缩进吗?如果是这样的话,问题很可能是因为在Python中,缩进确实很重要。即:

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

不等于

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

您可以在PEP8 style guide中看到更长的解释和更多的示例。你知道吗

请更改缩进

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

如果您有任何问题,请告诉我,我很乐意帮助您。你知道吗

相关问题 更多 >