Python ImportError: cannot import name ABC

mac2022-06-30  109

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()

转载于:https://www.cnblogs.com/vercont/p/10210172.html

最新回复(0)