继承的应用:
抽象类
Python从语法层面并没有像Java或C#那样提供对抽象类的支持 但是我们可以通过`abc`模块的`ABCMeta`元类和`abstractmethod`包装器来达到抽象类的效果
abstract.py
from abc import ABCMeta, abstractmethod
from math import pi
class Shape(object, metaclass=ABCMeta):
"""图形抽象类"""
@abstractmethod
def perimeter(self):
pass
@abstractmethod
def area(self):
pass
class Circle(Shape):
"""圆形"""
def __init__(self, radius):
self._radius = radius
def perimeter(self):
return 2 * pi * self._radius
def area(self):
return pi * self._radius * self._radius
def __str__(self):
return "我是一个圆"
class Rect(Shape):
"""矩形"""
def __init__(self, width, height):
self._width = width
self._height = height
def perimeter(self):
return (self._width + self._height) * 2
def area(self):
return self._width * self._height
def __str__(self):
return "我是一个矩形"
def main():
shapes = [Circle(4), Circle(2), Rect(4, 5)]
for shape in shapes:
print(shape)
print("周长:", shape.perimeter())
print("面积:", shape.area())
if __name__ == '__main__':
main()