SocketServer AttributeError: Instance has no attribute 'request'
SocketServer AttributeError: Instance has no attribute 'request'
我制作的这个小游戏有问题,我想将它添加到服务器。
我正在尝试从 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'
有人可以解释为什么这是错误的吗?
您已选择将 classes Character
&c 嵌入 class ThreadedTCPRequestHandler
-- 但嵌入与 派生自 非常不同。嵌入的 classes 没有对嵌入它们的 class 的 self
的特殊访问权限!
因此您需要使用 __init__
来丰富 Character
,该 __init__
使用 handler
实例来创建它:
class Character():
def __init__(self, handler):
self.name = ""
self.age = 0
self.handler = handler
(我也借此机会创建了 name 和 age instance 变量,这更有意义,并将缩进更改为标准的 4 个字符,而不是您使用的 2 个字符:- ).
Subclasses 必须适当地调用基础 class 的 __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=
部分只是为了清晰和可读性,并不是功能所必需的:-)。
整体架构现在很奇特(嵌入式classes在Python中很少使用)但至少它会起作用!-)
我制作的这个小游戏有问题,我想将它添加到服务器。
我正在尝试从 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'
有人可以解释为什么这是错误的吗?
您已选择将 classes Character
&c 嵌入 class ThreadedTCPRequestHandler
-- 但嵌入与 派生自 非常不同。嵌入的 classes 没有对嵌入它们的 class 的 self
的特殊访问权限!
因此您需要使用 __init__
来丰富 Character
,该 __init__
使用 handler
实例来创建它:
class Character():
def __init__(self, handler):
self.name = ""
self.age = 0
self.handler = handler
(我也借此机会创建了 name 和 age instance 变量,这更有意义,并将缩进更改为标准的 4 个字符,而不是您使用的 2 个字符:- ).
Subclasses 必须适当地调用基础 class 的 __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=
部分只是为了清晰和可读性,并不是功能所必需的:-)。
整体架构现在很奇特(嵌入式classes在Python中很少使用)但至少它会起作用!-)