这可能是一个基本的OO问题: 我正在尝试使用cmd进行嵌套的控制台菜单,该菜单运行良好。 我也希望我的所有子控制台都可以访问相同的对象。这并没有好转。对象继承和嵌套cmd
我简单的例子:
import cmd
class MainConsole(cmd.Cmd):
def __init__(self,obj1,obj2):
cmd.Cmd.__init__(self)
self.prompt = ">"
self.obj1 = obj1 # The objects I want access to in all my consoles.
self.obj2 = obj2
self.menu1 = SubConsole1() # I could pass in the objects here as arguments
self.menu2 = SubConsole2() # but there should be a better way.
def do_menu1(self,args):
self.menu1.cmdloop()
def do_menu2(self,args):
self.menu2.cmdloop()
def do_info(self,args):
self.menu1.do_info(args)
self.menu2.do_info(args)
def do_exit(self,args):
return -1
class SubConsole1(cmd.Cmd,MainConsole):
def __init__(self):
cmd.Cmd.__init__(self)
self.prompt = "1>"
def do_action(self,args):
print self.obj1.someattr1 # Doesn't work
class SubConsole2(cmd.Cmd,MainConsole):
def __init__(self):
cmd.Cmd.__init__(self)
self.prompt = "2>"
def do_action(self,args):
print obj1.someattr2 # Doesn't work
class anobject(object):
def __init__(self,init_value):
self.someattr1 = init_value
self.someattr2 = init_value * 2
object1 = anobject(1)
object2 = anobject(2)
c=MainConsole(object1,object2)
c.cmdloop()
当我运行此我得到
>
>menu1
1>info
AttributeError: SubConsole1 instance has no attribute 'obj1'
再试一次。
>
>menu2
2>info
NameError: global name 'obj1' is not defined
我不确定SubConsole是否应该是MainConsole
的子类。我也尝试在MainConsole
内嵌套SubConsoles。
你不应该在这里使用多重继承。 – 2011-04-28 16:55:18
增加了另一种做法,请查看。 – rossipedia 2011-04-28 17:21:17
做任何这些答案有帮助吗?如果不是,请提供进一步澄清。 – theheadofabroom 2011-04-29 06:22:33