f = obj.b() TypeError: 'int' object is not callable
时间: 2023-07-17 08:09:22 浏览: 45
这个错误发生在尝试调用 `obj.b()` 时。错误消息指出 `'int'` 对象不可调用,意味着 `obj.b` 实际上是一个整数而不是可调用的方法。
在之前的代码中,我们可以看到在方法 `a()` 中,`self.b` 被赋值为整数 `2`。因此,`obj.b` 现在是一个整数属性而不是原先的方法。
要解决这个问题,您可以修改代码以避免将整数赋值给 `self.b`。确保不要覆盖方法 `b()` 的定义。例如,您可以使用不同的变量名来存储整数值,而不是使用与方法名相同的变量名。下面是一个示例修正:
```python
class A():
def b(self):
self.a()
def a(self):
self.b_value = 2
self.c = 3
self.d = 4
```
在这个修正后的代码中,将整数值赋给了名为 `self.b_value` 的变量,而不是 `self.b`。这样就不会覆盖方法 `b()` 的定义,并且可以避免出现 `'int' object is not callable` 的错误。
相关问题
TypeError: 'str' object is not callable
TypeError: 'str' object is not callable 是一个常见的错误,它表示你正在尝试调用一个字符串对象,但字符串对象是不可调用的。这通常发生在以下情况下:
1. 将字符串当作函数进行调用。例如:
```python
x = "hello"
x() # TypeError: 'str' object is not callable
```
2. 将字符串当作方法进行调用。例如:
```python
x = "hello"
x.upper() # TypeError: 'str' object is not callable
```
3. 将字符串当作类进行实例化。例如:
```python
x = "hello"
obj = x() # TypeError: 'str' object is not callable
```
要解决这个错误,你需要确保你正在调用的是一个可调用的对象,而不是一个字符串。请检查你的代码,确保你正确地使用了函数、方法或类。
TypeError:JavaPackage object is not callable
引用中的代码是一个Spark的Python库的源代码片段,用于创建一个新的Java对象。具体来说,这段代码中的_jvm()函数返回一个py4j.java_gateway.JVMView对象,然后根据给定的java_class参数,使用getattr()函数获取相应的java_obj。最后,通过提供的参数java_args创建并返回一个新的Java对象。
引用中的测试代码是为了验证_jvm()函数的返回值。在这个测试中,可以看到java_obj变量的类型不断变化,最终分别是py4j.java_gateway.JVMView对象、py4j.java_gateway.JavaPackage对象和py4j.java_gateway.JavaClass对象。这意味着_jvm()函数返回的是一个Java的对象视图,可以通过它来访问Java类和方法。
引用中的解释对于问题中的TypeError提供了一些线索。根据解释,TypeError: JavaPackage对象不可调用,可能是因为传递给_new_java_obj()函数的java_class参数无效。如果传递了一个无效的路径,就会导致无法创建Java对象。
因此,要解决这个TypeError错误,需要确保传递给_new_java_obj()函数的java_class参数是有效的。你可以检查路径是否正确,并确保所需的Java类在该路径下是可用的。如果仍然遇到问题,可能需要进一步调试和排查代码中其他可能的问题。