抽象基类的基本用法
python中使用抽象基类需要调用包abc
用处:当需要定义具有共同特点的一类事物时,常常使用抽象基类
注意点:
- 抽象基类无法实例化,需要使用抽象方法的方法往往不写内容,只写一些说明性的文字
- 实现类必须实现抽象方法中的全部方法,否则那些方法不能称之为抽象方法,抽象方法前用
@abstractmethod
装饰 - 实现类的实例也可以直接调用父类中的其他非抽象方法。实例共有的属性信息,可以在抽象类中初始化,这样就可以避免在每个子类中单独传入
示例代码:
from abc import ABCMeta, abstractmethod
# 抽象基类,定义一系列抽象方法,不能单独使用
class VehicleBase(object, metaclass=ABCMeta):
def __init__(self, vehicle, year):
self.vehicle = vehicle
self.year = year
@abstractmethod
def run(self):
pass
@abstractmethod
def stop(self):
pass
def car_age(self):
print("{}已经用了{}年了".format(self.vehicle, self.year))
@staticmethod
def breaking():
print("车坏了")
# 实现类,继承抽象类,实现抽象类中的所有抽象方法
class Car1(VehicleBase):
def run(self):
print("车正在跑")
def stop(self):
print("车停了")
class Car2(VehicleBase):
def run(self):
print("车还在跑")
def stop(self):
print("车又停了")
if __name__ == "__main__":
car1 = Car1('丰田', 18)
car2 = Car2('Tesla', 5)
car1.run()
car1.stop()
car2.run()
car2.stop()
car2.breaking()
car2.car_age()