'int'对象没有属性'get_length'错误

问题描述 投票:0回答:2
 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'

这些lengthwidth属性应该是私有的,并且只能通过getter进行访问。我该如何解决?

python getter
2个回答
0
投票
方法double()返回一个整数(self.length)。您试图调用该号码的方法get_length(),但它没有此号码。建议的解决方案:将return self.length替换为return self

0
投票
您的double()方法有两个return语句,其中的第2个将永远不会执行,因此是第一个发行。

第二个问题是,您似乎想返回一个新的Box对象,该对象的值加倍,但是您正在做的是将

current

的值加倍,然后返回长度(一个[ C0])。这可能是您想要做的:

int

def double(self):
    return Box(self.__length * 2, self.__width * 2)
这样会给您您所期望的-Box(1, 2).double().get_length()


顺便说一句,您似乎是python新手。与其他语言不同,在python中,通常不需要具有“私有”属性(如果您确实需要,仍然可以访问它们)。通常,仅使用2self.length就足够了。如果要在访问时添加一些逻辑,请使用self.width装饰器。

@property

© www.soinside.com 2019 - 2024. All rights reserved.