这是什么意思? <__ main__.Circle对象的<bound方法Circle.calcArea在0x034E4070 >>

时间:2019-06-05 11:36:41

标签: python

我有以下代码,不知道为什么会抛出该错误:

import math

class Circle:
    def __init__(self, radius):
        self.radius=radius

    def calcPerimeter(radius):
        calcPerimeter=2*(math.pi)*radius

    def calcArea(radius):
        calcArea=(math.pi)*(radius)^2

    def __str__(self):
        msg="radius: "+str(self.radius)+" Area: "+str(self.calcArea)+" Perimeter: "+str(self.calcPerimeter)
        return msg

c1=Circle(100)
print(c1)

我收到此错误:

radius: 100 Area: <bound method Circle.calcArea of <__main__.Circle object at 0x034E4070>> Perimeter: <bound method Circle.calcPerimeter of <__main__.Circle object at 0x034E4070>>

我想要结果:

radius: 100 Area: 31415.92 Perimeter: 628.3184

2 个答案:

答案 0 :(得分:0)

您实际上并没有调用方法,只是将方法本身传递给str

msg="radius: "+str(self.radius)+" Area: "+str(self.calcArea(self.radius))+" Perimeter: "+str(self.calcPerimeter(self.radius))

答案 1 :(得分:0)

使用^而不是**时,您开始怀疑是否对Python进行了适当的介绍?

无论如何,在Python中,所有方法都需要将self作为其第一个参数(除非是静态方法),并且如果不使用self.property = "value"做某些事情,则应返回一些内容以使您的方法有用。

作为改进此代码的奖励,请查找属性装饰器和f字符串。

import math


class Circle:
    def __init__(self, radius):
        self.radius = radius

    def calcPerimeter(self):
        return 2 * (math.pi) * self.radius

    def calcArea(self):
        return (math.pi) * (self.radius) ** 2

    def __str__(self):
        msg = "radius: " + str(self.radius) + " Area: " + str(self.calcArea()) + " Perimeter: " + str(self.calcPerimeter())
        return msg


c1 = Circle(100)
print(c1)