[Level 2] Python abstract method testing

#!/bin/env python
import os, sys 
from abc import *

# =================================================

class ToolCmd(object):
    __metaclass__ = ABCMeta
    def __init__(self):
        pass
    
    @abstractmethod
    def doLocalAction(self):
        pass

class DoAction(ToolCmd):
    def __init__(self):
        pass

    def doLocalAction(self):
        print 'doLocalAction()'

# =================================================

class Test1(DoAction, ToolCmd):
    def __init__(self):
        pass 

class Test2(ToolCmd):
    def __init__(self):
        pass 

#class Test3(ToolCmd, DoAction):
#    def __init__(self):
#        pass 

# =================================================

t1 = Test1()
t1.doLocalAction()

t2 = Test2()
t2.doLocalAction()

#t3 = Test3()
#t3.doLocalAction()

# =================================================
Test Run: (Run-time error)
$ ./c.py 
doLocalAction()
Traceback (most recent call last):
  File "./c.py", line 42, in 
    t2 = Test2()
TypeError: Can't instantiate abstract class Test2 with abstract methods doLocalAction
$
#!/bin/env python
import os, sys 
from abc import *

# =================================================

class ToolCmd(object):
    __metaclass__ = ABCMeta
    def __init__(self):
        pass
    
    @abstractmethod
    def doLocalAction(self):
        pass

class DoAction(ToolCmd):
    def __init__(self):
        pass

    def doLocalAction(self):
        print 'doLocalAction()'

# =================================================

class Test1(DoAction, ToolCmd):
    def __init__(self):
        pass 

class Test2(ToolCmd):
    def __init__(self):
        pass 

class Test3(ToolCmd, DoAction):
    def __init__(self):
        pass 

# =================================================

t1 = Test1()
t1.doLocalAction()

t2 = Test2()
t2.doLocalAction()

t3 = Test3()
t3.doLocalAction()

# =================================================
Test Run: (Compiler-time error)
$ ./c.py 
Traceback (most recent call last):
  File "./c.py", line 33, in 
    class Test3(ToolCmd, DoAction):
  File "/usr/lib/python2.6/abc.py", line 79, in __new__
    cls = super(ABCMeta, mcls).__new__(mcls, name, bases, namespace)
TypeError: Error when calling the metaclass bases
    Cannot create a consistent method resolution
order (MRO) for bases ToolCmd, DoAction
stanley@Stanley-Ubuntu:/tmp$ 
$

Wish this helps.

regards,
Stanley Huang

Comments

Popular posts from this blog

[Level 2] Shell Interactive With Zenity Episode 5 -- list

[Level 2] iif in Python