当我编译Python代码时,为什么会出现AttributeError错误?

3

我试图编写代码,可以使我在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)
(注:本文未提供上下文,因此无法准确翻译某些术语。)

2
我提取了您手动输入的代码(不是构建类的可靠方式),就像您发布的那样。从中,问题很明显:change_sizeSquare之外。您需要修复缩进。我建议将此代码放入文件中。 - Prune
3个回答

2
如果您上面发布的代码与实际代码具有相同的缩进,那么问题很可能是由于Python中缩进确实很重要。也就是说:Original Answer
class Square():
    def init(self, s1):
        self.s1 = s1
        .
        .
        .

is not the same as

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

最初的回答
您可以在PEP8样式指南中查看更详细的解释和更多示例。 PEP8样式指南

0
请修改缩进。
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

如果您有任何问题,请告诉我,我非常乐意帮助您。


好的,我刚刚尝试了一下,看起来已经成功了。非常感谢! - jmr2903
当然,没问题。如果这对您有帮助,请将此答案标记为正确答案。 - Venkata Muttineni

0
一些事情:
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())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接