抽象类也是一个类,但是使用抽象类不能直接创建实例,会报错,一般是为了实现子类公共功能而封装的类。封装抽象类需要借助装饰器:@ abc.abstractmethod
import abc
class Person(object, metaclass=abc.ABCMeta):
@ abc.abstractmethod
def jump(self):
print('跳起来')
def eat(self):
print('XXXXXXXX')
class Man(Person):
def run(self):
print('跑的很快')
class Woman(Person):
def run(self):
print('跑的一般')
直接使用抽象类创建实例:
p = Person()
返回结果:
TypeError: Can't instantiate abstract class Person with abstract methods jump
使用子类创建实例:
m = Man()
m.run()
m.eat() # 子类实例可以使用抽象类中的方法
m.jump() # 子类实例不可以使用抽象类中的抽象方法
返回结果:
TypeError: Can't instantiate abstract class Woman with abstract methods jump
这时候我们发现还是返回错误,是什么原因呢?是因为我们在抽象类中定义了一个抽象方法,如果使用抽象类派生子类,必须要在子类中实现父类中的抽象方法。
import abc
class Person(object, metaclass=abc.ABCMeta):
@ abc.abstractmethod
def jump(self):
print('跳起来')
def eat(self):
print('XXXXXXXX')
class Man(Person):
def jump(self):
print('跑的很快')
m = Man()
# m.run() # AttributeError: 'Man' object has no attribute 'run'
m.eat() # 子类实例可以使用抽象类中的方法
m.jump() # 子类实例不可以使用抽象类中的抽象方法