我才刚开始使用Python类,并且想知道为什么我在此类中的“ weapon_condition”属性会出现一个错误,它无法访问/定义,例如Weapon.name()。我知道一般来说我的课程还有很多要学习的地方,因此如果这是一个初学者的错误,我们深表歉意。任何帮助,将不胜感激。还不确定为什么我的一半代码显示在实时代码区域之外...我发错了吗?
class Weapon:
def __init__(self, name, type, damage, time, wear_rate):
self.name = name
self.type = type
self.damage = damage
self.wear_rate = wear_rate
def weapon_condition(self):
name = Weapon.name()
damage = Weapon.damage()
wear_rate = Weapon.wear_rate()
time = Weapon.time()
condition = time*wear_rate
if condition >= damage * 0.8:
return name + ' is in good condition.'
elif 0.8 > condition >= 0.3:
return name + ' needs work.'
elif condition < 0.3:
return name + 'is almost broken.'
sword_1 = Weapon('Bloodsword', 'sword', 48, 120, 0.16)
print(sword_1.name)
print(sword_1.type)
print(sword_1.damage)
print(Weapon.weapon_condition(sword_1))
答案 0 :(得分:1)
您要创建武器类的实例,然后使用.attribute
或.method()
访问其属性或方法。
在方法内部,您要使用self
而不是类的名称。
class Weapon:
def __init__(self, name, type, damage, time, wear_rate):
self.name = name
self.type = type
self.damage = damage
self.time = time
self.wear_rate = wear_rate
def weapon_condition(self):
name = self.name # self not Weapon
damage = self.damage # self not Weapon
wear_rate = self.wear_rate # self not Weapon
time = self.time # self not Weapon
condition = time*wear_rate
if condition >= damage * 0.8:
return name + ' is in good condition.'
elif 0.8 > condition >= 0.3:
return name + ' needs work.'
elif condition < 0.3:
return name + 'is almost broken.'
sword_1 = Weapon('Bloodsword', 'sword', 48, 120, 0.16)
print(sword_1.name) # Print sword_1's attribute.
print(sword_1.type) # Print sword_1's attribute.
print(sword_1.damage) # Print sword_1's attribute.
print(sword_1.weapon_condition()) # Print the result returned by sword_1's method named 'weapon_condition'.
答案 1 :(得分:1)
weapon_condition
是一个实例方法。您可以在实例(例如sword_1
)上调用它,而不是在类(例如Weapon
)上调用它。
例如:print(sword_1.weapon_condition())
会完全满足您的要求,因为现在您正在使用实例上的常规语法在实例上调用实例方法。
至少在您自己的代码中,您需要清楚地了解什么是类,什么是类实例,什么是实例方法以及如何声明和使用这些东西。您不能仅将类和实例互换使用。他们不是一回事。