Python 类型错误:';int';对象不可调用-抱歉,如果AP 等级车: #建造师 定义初始(自我、品牌、型号、年份、mpg): #实例变量 self.carMake=make self.carModel=model self.carYear=年 自我效能=每加仑 self.gas=0 #特殊方法 定义(自我): 返回“%s%s%s”%(self.carYear、self.carMake、self.carModel) def加油(自身,加仑): 如果加仑回溯(最近一次调用):文件“”,第1行,在 > >c1.gas()类型错误:“int”对象不可调用
在Python 类型错误:';int';对象不可调用-抱歉,如果AP 等级车: #建造师 定义初始(自我、品牌、型号、年份、mpg): #实例变量 self.carMake=make self.carModel=model self.carYear=年 自我效能=每加仑 self.gas=0 #特殊方法 定义(自我): 返回“%s%s%s”%(self.carYear、self.carMake、self.carModel) def加油(自身,加仑): 如果加仑回溯(最近一次调用):文件“”,第1行,在 > >c1.gas()类型错误:“int”对象不可调用,python,self,Python,Self,在\uuu init\uuuu()方法中将self.gas初始化为int,但随后还定义了一个名为gas()的方法。一旦\uuuu init\uuuu()运行,self.gas就是一个int。我猜您在某个地方对此类的实例调用了gas() 将您的gas()方法重命名为类似于print\u gas(),或者,无论您在何处调用此方法,只需在名为Test.py的文件中执行print c1.gas()即可,而不用执行c1.gas() class Car: # constructor def
\uuu init\uuuu()
方法中将self.gas
初始化为int
,但随后还定义了一个名为gas()
的方法。一旦\uuuu init\uuuu()
运行,self.gas
就是一个int
。我猜您在某个地方对此类的实例调用了gas()
将您的
gas()
方法重命名为类似于print\u gas()
,或者,无论您在何处调用此方法,只需在名为Test.py的文件中执行print c1.gas()
即可,而不用执行c1.gas()
class Car:
# constructor
def __init__(self, make, model, year, mpg):
# instance variables
self.carMake = make
self.carModel=model
self.carYear = year
self.efficiency=mpg
self.gas = 0
# special method
def __str__(self):
return "%s %s %s"%(self.carYear, self.carMake, self.carModel)
def refuel(self,gallon):
if gallon < 0:
print("Sorry, amount cannot be negative")
else:
self.gas=self.gas+gallon
print (self.gas)
print("Added %.2f gallon of gas to the tank"%(self.gas))
def gas(self):
print(self.gas)
> Traceback (most recent call last): File "<pyshell#12>", line 1, in
> <module>
> c1.gas() TypeError: 'int' object is not callable
现在,我在控制台中导入类测试,看看它有哪些方法:
class Test:
def __init__(self):
self.x=3
def x(self):
print self.x
请注意,它具有方法x。现在让我们创建一个Test的实例
>>> from test import Test
>>> [method for method in dir(Test) if callable(getattr(Test, method))]
['__init__', 'x']
让我们看看我们有什么方法
>>> k=Test()
如您所见,方法x不再可用。为什么?
当您创建k作为测试实例时,它执行\uuu init\uuu
方法,并看到self.x=3
,它将x重新定义为self
中的一个变量,并且您的方法x()
消失了。因此,当您执行k.x()
时,它认为您是在self.x
上执行的,您在\uuuuuu init\uuuuuu
中设置了该选项,该选项不可调用。但是,k.x
将起作用,如下所示:
>>> [method for method in dir(k) if callable(getattr(k, method))]
['__init__']
>>>
>>k.x()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“int”对象不可调用
>>>k.x
3.
>>>
结论是不要将变量和方法命名相同。您的方法gas
和您在\uuu init\uu
中创建的实例属性gas
具有相同的名称。该方法存储在类上,但被存储在实例上的属性“隐藏”,因为Python首先在实例上查找名称,然后在类及其父对象上查找名称
因此,self.gas
是一个整数,不能调用它
>>> k.x()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> k.x
3
>>>