这个python程序被设计用来查找圆的面积和周长,但是由于某种原因,当我试图执行area方法时,我得到了一个TypeError: 'float' object is not callable
错误。
class Circle:
pi = 3.14
def __init__(self, radius=1):
self.radius = radius
self.area = radius * radius * self.pi
def circum(self):
return self.pi * self.radius * 2
my_circle = Circle(30)
my_circle.area()
误差
Traceback (most recent call last):
File "test.py", line 13, in <module>
my_circle.area()
TypeError: 'float' object is not callable
Circle.area
不是一个方法。它是一个简单的变量。你可以用my_circle.area
来读。
如果你想让它成为一个函数,那么你可以改变半径并重新计算,那么你需要让它成为一个函数。
def area(self):
return self.radius * self.radius * self.pi
说明:
问题所在很简单。self.area
是在对象中存储和初始化的变量,而不是函数。因此,您可以直接访问它,而无需在最后使用()
, CC_5用于函数调用(或初始化类的对象,请参阅附加说明)。检查下面的代码和注释。
额外注意:您将看到使用
Circle(30)
来初始化对象。这个约定用于在实例化对象时将参数传递给类中的__init__
函数,它看起来就像调用函数一样!
class Circle:
pi = 3.14
def __init__(self, radius=1):
self.radius = radius
self.area = radius * radius * self.pi
def circum(self):
return self.pi * self.radius * 2
my_circle = Circle(30)
#View all the variables initialized in your object
my_circle.__dict__
>>{'radius': 30, 'area': 2826.0}
#Fetch a variable
my_circle.area
>>2826.0
#Call a function
my_circle.circum()
>>188.4
修改:
根据你在描述中提到的,这是你应该如何理想地定义你所提到的类-
class Circle:
def __init__(self, radius=1):
self.pi = 3.14
self.radius = radius
def circum(self):
self.circum = self.pi * self.radius * 2
print(self.circum)
def area(self):
self.area = self.radius * self.radius * self.pi
print(self.area)
circle = Circle(30)
#Only radius defined till now
circle.__dict__
#>>{'pi': 3.14, 'radius': 30}
circle.circum()
#>>188.4
circle.area()
#>>2826.0
#After calling the 2 functions, the self dict gets updated with area and circumference
circle.__dict__
#>>{'pi': 3.14, 'radius': 30, 'circum': 188.4, 'area': 2826.0}
<标题>思维过程标题>我喜欢想象类的对象的方式是,它是一个对象,是一个数据库,定义了一些可选的显式函数。
__init__
函数初始化数据库。您可以通过使用self
访问数据库包含的所有内容。因此,当您将self
传递给函数时,您将赋予该函数访问该对象存储的所有数据库的权限。要打印该数据库中的所有内容,可以使用my_circle.__self__
我想解释一下错误的含义。在python中有可调用对象和不可调用对象。不仅函数是可调用的,类的实例也是可调用的。
float对象是不可调用的。面积是浮动的)。定义了__call__
方法的类是可调用的。
1.1()
TypeError: 'float' object is not callable
如果调用1.1(),将得到相同的错误。因为1.1是float类型,而float没有__call__
方法。
看下面的例子
class callable_area(float):
def __call__(self, x):
print('My parent is float and can not be called, but i can be')
print(self * x)
# Product of two numbers
callable_area(1.1)(2.2)
callable_area(1.1)
不是一个函数,是类的实例,但我仍然可以像这样调用callable_area(1.1)(2.2)
。
现在也许你得到的错误只是一个无意识的错误,你把它转换成函数或删除它前面的空括号并删除错误,但知道错误意味着什么也是一个好主意