erança de objeto e cmd aninha
Esta é provavelmente uma pergunta básica do OO: estou tentando criar um menu de console aninhado com o cmd que correu bem. Também quero que todos os meus subconsoles tenham acesso aos mesmos objetos. Isso não correu bem.
Meu exemplo simples:
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()
Quando eu corro isso, recebo
>
>menu1
1>info
AttributeError: SubConsole1 instance has no attribute 'obj1'
Tente novamente
>
>menu2
2>info
NameError: global name 'obj1' is not defined
Não tenho certeza se os SubConsoles devem ser subclasses deMainConsole
. Eu também tentei aninhar os SubConsoles dentro deMainConsole
.