shape.py 1.1 KB
Newer Older
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
1 2
"""
继承的应用
J
jackfrued 已提交
3 4 5 6
- 抽象类
- 抽象方法
- 方法重写
- 多态
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
7 8 9 10 11 12 13 14 15 16 17 18

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

from abc import ABCMeta, abstractmethod
from math import pi


class Shape(object, metaclass=ABCMeta):

J
jackfrued 已提交
19 20 21
    @abstractmethod
    def perimeter(self):
        pass
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
22

J
jackfrued 已提交
23 24 25
    @abstractmethod
    def area(self):
        pass
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
26 27 28 29


class Circle(Shape):

J
jackfrued 已提交
30 31
    def __init__(self, radius):
        self._radius = radius
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
32

J
jackfrued 已提交
33 34
    def perimeter(self):
        return 2 * pi * self._radius
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
35

J
jackfrued 已提交
36 37
    def area(self):
        return pi * self._radius ** 2
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
38

J
jackfrued 已提交
39 40
    def __str__(self):
        return '我是一个圆'
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
41 42 43 44


class Rect(Shape):

J
jackfrued 已提交
45 46 47
    def __init__(self, width, height):
        self._width = width
        self._height = height
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
48

J
jackfrued 已提交
49 50
    def perimeter(self):
        return 2 * (self._width + self._height)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
51

J
jackfrued 已提交
52 53
    def area(self):
        return self._width * self._height
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
54

J
jackfrued 已提交
55 56
    def __str__(self):
        return '我是一个矩形'
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
57 58 59


if __name__ == '__main__':
J
jackfrued 已提交
60 61 62 63 64
    shapes = [Circle(5), Circle(3.2), Rect(3.2, 6.3)]
    for shape in shapes:
        print(shape)
        print('周长:', shape.perimeter())
        print('面积:', shape.area())