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