12. @property 装饰器

我们可以给计算三角形周长和面积的方法添加 @property 装饰器(Python 内置类型),这样 perimeterarea 就变成了两个属性,不再通过调用方法的方式来访问,而是用对象访问属性的方式直接获得。

python
class Triangle(object):
    """三角形"""

    def __init__(self, a, b, c):
        """初始化方法"""
        self.a = a
        self.b = b
        self.c = c

    @staticmethod
    def is_valid(a, b, c):
        """判断三条边长能否构成三角形(静态方法)"""
        return a + b > c and b + c > a and a + c > b

    @property
    def perimeter(self):
        """计算周长"""
        return self.a + self.b + self.c

    @property
    def area(self):
        """计算面积"""
        p = self.perimeter / 2
        return (p * (p - self.a) * (p - self.b) * (p - self.c)) ** 0.5


t = Triangle(3, 4, 5)
print(f'周长: {t.perimeter}')
print(f'面积: {t.area}')

▶ 运行结果:

输出
周长: 12
面积: 6.0