Python 高级特性之抽象类

Par @Martin dans le
Tags :

Python 中定义抽象类, 需要使用 abc 模块, 该模块定义了一个元类(ABCMeata), 和装饰器 @abstractmethod、@abstractproperty (目前貌似使用这两个中的任一个都可以…)

  • 抽象类不能直接实例化
  • 子类必须实现抽象类 abstractmethod、abstractproperty 方法
  • Python 中使用抽象功能会增大消耗, 所以大部分情况下都采用更宽松的作法, 即定义成正常的类, 通过编程规范来约束
#!coding=utf-8
from abc import ABCMeta, abstractmethod, abstractproperty

class Foo:
  __metaclass__ = ABCMeta

  @abstractmethod
  def spam(self, a, b):
    pass

  @abstractproperty
  def name(self):
    pass

class Bar(Foo):
  def spam(self, a, b):
    print a, b

  def name():
    pass

b = Bar()
b.spam(1,2)