object inheritance and nested cmd

后端 未结 3 1368
深忆病人
深忆病人 2021-01-07 01:11

This is probably a basic OO question: I\'m trying to do a nested console menu with cmd which has gone well. I also want all my sub-consoles to have access to the same object

3条回答
  •  一向
    一向 (楼主)
    2021-01-07 01:36

    The other answer is correct insofar as you should not be using multiple inherritance, as the following is true:

    class A(object):
      pass
    class B(A):
      pass
    class C(A):
      pass
    class D(B):
      pass
    a = A()
    b = B()
    c = C()
    d = D()
    
    isTrue = isinstance(a,A) and isinstance(b,A) and isinstance(c,A) and isinstance(d,A)
    isTrue = isTrue and isinstance(b,B)and isinstance(d,B)
    isTrue = isTrue and isinstance(c,C) 
    isTrue = isTrue and isinstance(d,D)
    
    >>> print isTrue
    True
    

    It would also be wise to create a method of your main class wich creates subcmds, passing their reference to the subcmd's __init__ function. This way you have your object spawn its children more naturally.

    class MainConsole(cmd.Cmd):
        def spawnsubconsole(self):
            return SubConsole1(self)
        def __init__(self):
           cmd.Cmd.__init__(self, obj1, obj2)
           self.obj1 = obj2
           self.obj2 = obj2
    
    class SubConsole1(cmd.Cmd):
        def __init__(self, maincon):
            cmd.Cmd.__init__(self)
            self.maincon = maincon
    

    Then you can access the objects you want by accessing self.maincon.obj1 and self.maincon.obj2 and get the sub-cmd by running maincon.spawnsubconsole() assuming maincon is an instance of the main console class.

提交回复
热议问题