"""

继承的应用
	- 抽象类
	- 抽象方法
	- 方法重写
	- 多态

Version: 0.1
Author: 骆昊
Date: 2018-03-12

"""

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 ** 2

	def __str__(self):
		return '我是一个圆'


class Rect(Shape):

	def __init__(self, width, height):
		self._width = width
		self._height = height

	def perimeter(self):
		return 2 * (self._width + self._height)

	def area(self):
		return self._width * self._height

	def __str__(self):
		return '我是一个矩形'


if __name__ == '__main__':
	shapes = [Circle(5), Circle(3.2), Rect(3.2, 6.3)]
	for shape in shapes:
		print(shape)
		print('周长:', shape.perimeter())
		print('面积:', shape.area())
