我对这个迷你游戏有一个问题,我试图添加到服务器。
我正在尝试从一个Character的实例打印一个函数,但我不知道如何传递正确的函数。 这就是我所拥有的:
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
Class Character():
name = ""
age = 0
Class Human(Character):
locationX = 0
locationY = 0
def help(self):
self.request.send("Q to Quit")
class Boy(Character, Human):
def __init__(self, name):
self.name = name
age = 10
def handle(self):
p1 = self.Boy("Jim")
self.request.send(":")
command = self.request.recv(1024).strip()
if command == "help":
p1.help()
我的错误是:
File "/usr/lib/python2.7/SocketServer.py", line 649, in __init__
self.handle()
File "rpg.py", line 281, in handle
p1.help()
File "rpg.py", line 23, in help
self.request.send("Q to Quit")
AttributeError: Boy instance has no attribute 'request'
有人可以解释为什么这是错的吗?
答案 0 :(得分:0)
您已选择在课程Character
中安排课程ThreadedTCPRequestHandler
&c; 嵌入 - 但嵌入式与派生自非常不同>。嵌入式类无法访问嵌入它们的类的self
!
因此,您需要使用Character
来__init__
来充实,handler
实例会创建它:
class Character():
def __init__(self, handler):
self.name = ""
self.age = 0
self.handler = handler
(我也借此机会制作名称和年龄实例变量,这更有意义,并将缩进更改为标准4个字符与您使用的2: - )。
然后,子类必须适当地调用基类__init__
:
class Boy(Character, Human):
def __init__(self, name, handler):
Character.__init__(self, handler)
self.name = name
self.age = 10
并且还必须创建新实例:
def handle(self):
p1 = self.Boy("Jim", handler=self)
# etc etc
(这里的handler=
部分只是为了清晰和可读性,功能并非严格要求: - )。
整体架构现在很奇特(嵌入式类很少在Python中使用)但至少它会起作用! - )