Cla*_*ton 1 python tuples object callable typeerror
到目前为止,这是我正在做的事情:
# -*- coding: cp1252 -*-
import time
class Item():
def __init__(self, name, description, base_value):
self.name = name
self.description = description
self.ingredients = ingredients
self.base_value = value
def __str__(self):
return format(self.name, self.description, self.ingredients, self.base_value)
class Metal(Item):
def __init__(self, name, description, ingredients, base_value):
self.smelt_time = smelt_time
self.smelted = smelted
def __str__(self):
return format(self.name, self.description, self.ingredients, self.base_value, self.smelt_time, self.smelted)
class Bronze_Ingot(Metal):
def __init__(self):
self.name = "Bronze Ingot",
self.description = "A refined ingot of bronze."
#self.ingredients = Tin_Ore(1)+Copper_Ore(1) <--- I will get these lines working later...
self.base_value = 33
self.smelt_time = 15
self.smelted = ()
class Fuel(Item):
def __init__(self, name, description, ingredients, base_value):
self.fuel_time = fuel_time
def __str__(self):
return format(self.name, self.description, self.ingredients, self.base_value, self.fuel_time)
class Cloth(Fuel):
def __init__(self):
self.name = "Cloth",
self.description = "A piece of cotton cloth."
#self.ingredients = 2 Cotton <--- I will get these lines working later...
self.base_value = 2
self.fuel_time = 5
Run Code Online (Sandbox Code Playgroud)
但是我在使用此功能时遇到了很大的麻烦...
def smelted(Fuel, Metal):
if (Fuel.fuel_time - Metal.smelt_time) > 0:
time.sleep(1)
print "Smelting", Metal.name, "..."
time.sleep(Metal.smelt_time)
print "Time to forge!"
Run Code Online (Sandbox Code Playgroud)
问题或多或少地使其起作用。我的朋友和我曾尝试一切,我们可以把这个函数运行的时候,但无济于事。这是我们最近的尝试:
from Smelting_Progress import *
x = Cloth()
y = Bronze_Ingot()
y.smelted(x,y)
Run Code Online (Sandbox Code Playgroud)
尝试运行此命令后,我收到此错误:
Traceback (most recent call last):
File "C:\Users\WCS-HSSTUDENT\Desktop\Files\Project SAOffline\Coding\New Aincrad World\Items\NAI_Smelted.pyw", line 6, in <module>
Metal.smelted(Fuel, Metal)
TypeError: 'tuple' object is not callable
Run Code Online (Sandbox Code Playgroud)
您有一个instance属性smelted;您将其设置为Metal.__init__():
self.smelted = smelted
Run Code Online (Sandbox Code Playgroud)
您的Bronze_Ingot子类将其设置为一个空元组:
self.smelted = ()
Run Code Online (Sandbox Code Playgroud)
方法和元组不能同时使用相同的名称。重命名一个或另一个。
如果您打算将smelted()代码用作函数,请在顶层(与您的类相同的缩进)进行定义,然后将其作为函数而不是方法进行调用:
smelted(x, y)
Run Code Online (Sandbox Code Playgroud)
(请注意,y.前面没有)。