我有以下代码,不知道为什么会抛出该错误:
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
答案 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)