Seb*_*ian 31 python abc abstract-methods
我读过有关抽象基类的python文档:
从这里:
abc.abstractmethod(function)指示抽象方法的装饰员.使用这个装饰器需要该类的元类是
ABCMeta从它派生的.ABCMeta除非所有抽象方法和属性都被覆盖,否则无法实例化具有派生自元类的类.
而在这里
您可以将
@abstractmethod装饰器应用于必须实现的draw()等方法; 然后,Python将为未定义该方法的类引发异常.请注意,只有在您实际尝试创建缺少该方法的子类的实例时才会引发该异常.
我已经用这段代码测试了一下:
import abc
class AbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def abstractMethod(self):
return
class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"
c = ConcreteClass()
c.abstractMethod()
Run Code Online (Sandbox Code Playgroud)
代码很好,所以我不明白.如果我输入c.abstractMethod我得到:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?ConcreteClass 必须实现抽象方法,但我也不例外.
mou*_*uad 46
你使用python3运行该代码?如果是的话你应该知道在python 3中声明元类有变化你应该这样做:
import abc
class AbstractClass(metaclass=abc.ABCMeta):
@abc.abstractmethod
def abstractMethod(self):
return
Run Code Online (Sandbox Code Playgroud)
l00*_*01d 25
导入自己的抽象类ABC并将abc其作为子类ABC可以帮助使代码看起来更干净。
from abc import ABC, abstractmethod
class AbstractClass(ABC):
@abstractmethod
def abstractMethod(self):
return
class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"
# The following would raise a TypeError complaining
# abstractMethod is not implemented
c = ConcreteClass()
Run Code Online (Sandbox Code Playgroud)
使用 Python 3.6 进行测试