Python Class 属性错误 'Event' 没有属性
Python Class Attribute Error 'Event' has no attribute
我为几个朋友的游戏协作创建了一个代码,我正在制作这个游戏是为了好玩,我在 python 完全是个菜鸟。作为游戏的一部分,我为战场创建了一个 class:
from tkinter import *
import random
root = Tk()
class battle:
def __init__(self, MonHealth):
self.Distance = 10
self.Center = 5
self.MonHealth = MonHealth
def LEFT1(self):
if self.Center < 20:
self.Distance += 1
distance = abs(self.Distance)
self.Center += 1
center = abs(self.Center)
print (str(distance) + " meters" + " " + str(center) + " meters")
def right1(self):
if self.Center > -20:
self.Distance -= 1
self.Center -= 1
center = abs(self.Center)
distance = abs(self.Distance)
print (str(distance) + " meters" + " " + str(center) + " meters")
def Lunge1(self):
hit = [0,1,2,3,4]
random.shuffle(hit)
if abs(self.Distance) <= 1 and hit[0] >= 2:
print ("strike")
self.MonHealth -= 10
if self.MonHealth < 0:
print ("YOU WIN")
elif abs(self.Distance) <= 1:
print ("blocked")
else:
print ("miss")
def block1(self):
print ("blocked enemy")
root.bind("<Left>", LEFT1)
root.bind("<Right>", right1)
root.bind("<Return>", Lunge1)
root.bind("<Shift_L>", block1)
当我 运行 class 时,出现以下错误:
AttributeError: 'Event' object has no attribute 'Center'
我该如何解决这个问题?
我看了其他的解释和解决方法 about/for 属性错误,但都是关于 'str' 对象的。
作为旁注,如果我完全删除 'Center',它会给我与 MonHealth 相同的错误。我想我完全搞砸了这段代码,但有什么办法可以挽救它吗?谢谢!
您 class 的使用方式有误。你必须先初始化它:
a=battle(45) # you can use any number you want instead of 45
那么你要bind
如下:
root.bind("<Left>", a.LEFT1)
root.bind("<Right>", a.right1)
root.bind("<Return>", a.Lunge1)
root.bind("<Shift_L>", a.block1)
您也可以将 class 的方法修饰为 @classmethod
,但在您的情况下这没有多大意义,因为您仍然需要初始化 self.MonHealth
变量。
我为几个朋友的游戏协作创建了一个代码,我正在制作这个游戏是为了好玩,我在 python 完全是个菜鸟。作为游戏的一部分,我为战场创建了一个 class:
from tkinter import *
import random
root = Tk()
class battle:
def __init__(self, MonHealth):
self.Distance = 10
self.Center = 5
self.MonHealth = MonHealth
def LEFT1(self):
if self.Center < 20:
self.Distance += 1
distance = abs(self.Distance)
self.Center += 1
center = abs(self.Center)
print (str(distance) + " meters" + " " + str(center) + " meters")
def right1(self):
if self.Center > -20:
self.Distance -= 1
self.Center -= 1
center = abs(self.Center)
distance = abs(self.Distance)
print (str(distance) + " meters" + " " + str(center) + " meters")
def Lunge1(self):
hit = [0,1,2,3,4]
random.shuffle(hit)
if abs(self.Distance) <= 1 and hit[0] >= 2:
print ("strike")
self.MonHealth -= 10
if self.MonHealth < 0:
print ("YOU WIN")
elif abs(self.Distance) <= 1:
print ("blocked")
else:
print ("miss")
def block1(self):
print ("blocked enemy")
root.bind("<Left>", LEFT1)
root.bind("<Right>", right1)
root.bind("<Return>", Lunge1)
root.bind("<Shift_L>", block1)
当我 运行 class 时,出现以下错误:
AttributeError: 'Event' object has no attribute 'Center'
我该如何解决这个问题?
我看了其他的解释和解决方法 about/for 属性错误,但都是关于 'str' 对象的。
作为旁注,如果我完全删除 'Center',它会给我与 MonHealth 相同的错误。我想我完全搞砸了这段代码,但有什么办法可以挽救它吗?谢谢!
您 class 的使用方式有误。你必须先初始化它:
a=battle(45) # you can use any number you want instead of 45
那么你要bind
如下:
root.bind("<Left>", a.LEFT1)
root.bind("<Right>", a.right1)
root.bind("<Return>", a.Lunge1)
root.bind("<Shift_L>", a.block1)
您也可以将 class 的方法修饰为 @classmethod
,但在您的情况下这没有多大意义,因为您仍然需要初始化 self.MonHealth
变量。