• Python ImportError: cannot import name ABC


    Python 3.5.2 测试可以运行

    import sys                                                                      
    from abc import ABC,abstractmethod                                              
                                                                                    
    class MyBase(ABC):                                                              
        @abstractmethod                                                             
        def func(self):                                                             
            '''Implement in subclass'''                                             
                                                                                    
    class MyClass(MyBase):                                                          
        def func(self):                                                             
            con = "%s %s" % (self.__class__.__name__,sys._getframe().f_code.co_name)
            print(con)                                                              
                                                                                    
    obj = MyClass()                                                                 
    obj.func() 
    

    输出

    MyClass func
    

    python 2.7.12测试可以运行

    import sys                                                                                                                  
    from abc import ABCMeta, abstractmethod                                         
                                                                                    
    class MyBase():                                                                 
        __metaclass__ = ABCMeta                                                     
        @abstractmethod                                                             
        def func(self):                                                             
            '''Implement in subclass'''                                             
                                                                                    
    class MyClass(MyBase):                                                          
        def func(self):                                                             
            con = "%s %s" % (self.__class__.__name__,sys._getframe().f_code.co_name)
            print(con)                                                              
                                                                                    
    obj = MyClass()                                                                 
    obj.func()  
    

    输出

    MyClass func
    

    上面python2的代码在python3中也可以正常输出.
    还有一种3.0-3.3的写法 不写了.

    兼容后的代码

    from __future__ import absolute_import                                          
    from __future__ import division                                                 
    from __future__ import print_function                                           
                                                                                    
    import sys                                                                      
    if sys.version > '3':                                                           
        from abc import ABC,abstractmethod                                          
    else:                                                                           
        from abc import ABCMeta, abstractmethod                                     
                                                                                    
    if sys.version > '3':                                                           
        class MyBase(ABC):                                                          
            @abstractmethod                                                         
            def func(self):                                                         
                '''Implement in subclass'''                                         
    else:                                                                           
        class MyBase():                                                             
            __metaclass__ = ABCMeta                                                 
            @abstractmethod                                                         
            def func(self):                                                         
                '''Implement in subclass'''                                         
                                                                                    
    class MyClass(MyBase):                                                          
        def func(self):                                                             
            con = "%s %s" % (self.__class__.__name__,sys._getframe().f_code.co_name)
            print(con)                                                              
                                                                                    
    obj = MyClass()                                                                 
    obj.func()
    
  • 相关阅读:
    最近半年
    CentOS 6.4和Eclipse Juno CDT(4.2.2)的bug
    cygwin/X XDMCP连接CentOS
    手把手教你emacs cedet C/C++自动补全
    ProFont – 识别度极高的终端字体
    ACE之旅——环境搭建、HelloWorld
    静态链表在优化中的应用
    ACE之旅——第一个ACE通讯程序daytime
    ThinkPHP 自定义标签测试 冰糖
    FreeTextBox使用详解 (版本3.1.1)
  • 原文地址:https://www.cnblogs.com/vercont/p/10210173.html
Copyright © 2020-2023  润新知