为了账号安全,请及时绑定邮箱和手机立即绑定

使用列表推导定义类的属性会导致 AttributeError

使用列表推导定义类的属性会导致 AttributeError

POPMUISE 2021-12-17 16:38:37
我想定义一个计算圆面积并计算圆数的类input 1,2,3Output [3.14, 12.56, 28.26]3但我没有得到所需的输出。使用的代码:class Circle:    def __init__(self, radius):        [self.radius for i in radius]      def area(self):        return [3.14*self.radius**2 for i in self.radius]        # return 3.14 * self.radius ** 2inputradiusstr = "1,2,3"list_radius = inputradiusstr.split(',')obj2 = Circle(list_radius)print(obj2.area())给出以下错误:Traceback (most recent call last):  File "path/to/file.py", line 11, in <module>    obj2=Circle(list_radius)  File "path/to/file.py", line 3, in __init__    [self.radius for i in radius]  File "path/to/file.py", line 3, in <listcomp>    [self.radius for i in radius]AttributeError: 'Circle' object has no attribute 'radius'
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

我认为您在使用类时可能会产生误解。将类视为对象的模板。当您调用 时Circle(...),您将创建该对象的一个实例,并且一个类具有多个实例是完全可以接受的。


在您的示例中,考虑为您的三个输入(或多个输入)中的每一个制作三个圆圈,然后这会简化您的课程,因为您不需要任何列表。


class Circle:


    def __init__(self, radius):

        self.radius = radius


    def area(self):

        return 3.14 * self.radius**2

然后您的主要代码将处理每个输入作为它自己的圈子:


inputradiusstr="1,2,3"

list_radius=inputradiusstr.split(',')

for radius in list_radius:

    c = Circle(int(radius))

    print(c.area())

请注意,我们需要将半径从字符串类型转换为整数,以便我们可以对其进行计算。


如果您需要计算您创建的圈子的数量,那么这只是len(list_radius).


查看完整回答
反对 回复 2021-12-17
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

类型转换将适用于您的情况。


inputradiusstr="1,2,3"

list_radius=list(map(int,inputradiusstr.split(',')))

obj2=Circle(list_radius)

print(obj2.area())

你的班级有一些缩进不匹配。我认为它只是在输入问题时。


查看完整回答
反对 回复 2021-12-17
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

inputradiusstr="1,2,3"

list_radius=[float(item) for item in inputradiusstr.split(',')]

因此,半径可以是浮点数而不是字符串。


  def area(self):

    return [3.14*self.radius**2 for i in self.radius]

    #return 3.14 * self.radius **2

在列表理解中,它应该是3.14*i**2.


查看完整回答
反对 回复 2021-12-17
  • 3 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号