我已经阅读了有关抽象基类的python文档:

here:



here



我已经使用此代码进行了测试:

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

该代码很好,所以我不明白。如果我键入c.abstractMethod,我得到:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>

我在这里想念的是什么? ConcreteClass必须实现抽象方法,但是我也没有异常(exception)。

最佳答案

您是否正在使用python3运行该代码?如果是的话,您应该知道在python3 have changes中声明元类,您应该这样做:

import abc

class AbstractClass(metaclass=abc.ABCMeta):

  @abc.abstractmethod
  def abstractMethod(self):
      return
完整的代码和答案的解释是:
import abc

class AbstractClass(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def abstractMethod(self):
        return

class ConcreteClass(AbstractClass):

    def __init__(self):
        self.me = "me"

# Will get a TypeError without the following two lines:
#   def abstractMethod(self):
#       return 0

c = ConcreteClass()
c.abstractMethod()
如果未为abstractMethod定义ConcreteClass,则在运行上述代码时将引发以下异常:TypeError: Can't instantiate abstract class ConcreteClass with abstract methods abstractMethod

关于python - python @abstractmethod装饰器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7196376/

10-13 03:24