在python中使用类

时间:2015-11-12 01:36:34

标签: python class

我正在使用python中的一个简单的cuboid类程序,我对这一切都很陌生,所以我对我的代码的第一个版本有几个问题:

from math import *

class Cuboid:
    def __init__(self,length,width,height):
        self.length=length
        self.width=width
        self.height=height
        self.LSA=0
        self.SA=0
        self.volume=0
    def getDimensions(self):
        return self.length
        return self.width
        return self.height

    def LateralSurfaceArea(self):
        LSA=2*((self.length*self.height)+(self.width*self.height))
        return LSA

    def SurfaceArea(self):
        SA=2*((self.length*self.width)+(self.width*self.height)+(self.height*self.length))
        return SA

    def Volume(self):
        Volume=self.length*self.width*self.height
        return volume

我的第一个问题,这是设置类并初始化它的正确方法吗? 第二个问题,这一部分有没有发光错误?我正在自学一本教科书,没有例子。 最后我的主要是:

from cuboid import *

def main():
    cb = Cuboid(3, 4, 5)
    l, w, h = cb.getDimensions()
    print("The length of the cuboid is", l)
    print("The width of the cuboid is", w)
    print("The height of the cuboid is", h)
    print("lateral surface area=", cb.LateralSurfaceArea())
    print("surface area=", cb.SurfaceArea())
    print("volume=", cb.Volume())

main()

当我运行main函数时,我收到以下错误:

l, w, h = cb.getDimensions()
TypeError: 'int' object is not iterable

有谁知道为什么会出现这个错误,无论如何我可以绕过它?抱歉,我知道我只是想问一个具体的问题,但是为了正确学习id而不是确保我正朝着正确的方向前进,因为课程对我来说是新的。

2 个答案:

答案 0 :(得分:3)

返回多个值时,不要使用多个return语句。相反,你返回一个元组:

return (self.length, self.width, self.height)

在您的情况下,只执行第一个return语句,从而将单个int传递给调用者。然后它尝试通过迭代将该值解压缩到您指定的三个变量中。返回的单个值是不可迭代的,因此是错误。

答案 1 :(得分:0)

稍微清理过的版本:

class Cuboid:
    def __init__(self, length, width, height):
        self.length = length
        self.width  = width
        self.height = height

    @property
    def lateral_surface_area(self):
        front_area = self.length * self.height
        side_area  = self.width  * self.height
        return 2 * (front_area + side_area)

    @property
    def surface_area(self):
        top_area   = self.length * self.width
        front_area = self.length * self.height
        side_area  = self.width  * self.height
        return 2 * (top_area + front_area + side_area)

    @property
    def volume(self):
        return self.length * self.width * self.height

def main():
    cube = Cuboid(3, 4, 5)
    print("The length of the cuboid is", cube.length)
    print("The width of the cuboid is",  cube.width )
    print("The height of the cuboid is", cube.height)
    print("Lateral surface area =", cube.lateral_surface_area)
    print("Surface area =", cube.surface_area)
    print("Volume =", cube.volume)

if __name__=="__main__":
    main()