'float'对象不可为 Python 程序调用



这个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)

现在也许你得到的错误只是一个无意识的错误,你把它转换成函数或删除它前面的空括号并删除错误,但知道错误意味着什么也是一个好主意

相关内容

  • 没有找到相关文章

最新更新