zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    Codeforces Round #573 (Div. 2) C. Tokitsukaze and Discard Items
    Codeforces Round #573 (Div. 2) B
    练习2
    练习1
    上机练习4
    上机练习3
    上机练习1
    JAVA第一次作业
    es document的强制替换、创建、删除
    es 返回定制化的_source数据
  • 原文地址:https://www.cnblogs.com/vercont/p/10210173.html
Copyright © 2011-2022 走看看