python 学习-------面向对象编程进阶
静态方法和类方法
我们在类里面写的函数,通常称为方法,它们基本上都是发给对象的消息
但是有的时候,我们的消息并不是想发给对象,而是希望发给类
比如定义一个三角形类,通过传入三条边的长度来构造三角形,并提供计算周长和面积的方法。计算周长和面积肯定是三角形对象的方法,这一点毫无疑问。但是在创建三角形对象时,传入的三条边长未必能构造出三角形,为此我们可以先写一个方法来验证给定的三条边长是否可以构成三角形,这种方法很显然就不是对象方法,因为在调用这个方法时三角形对象还没有创建出来。我们可以把这类方法设计为静态方法
或类方法
,也就是说这类方法不是发送给三角形对象的消息,而是发送给三角形类的消息.
静态方法:发给类的消息可以使用@staticmethod
装饰器
class Triangle:
def __init__(self, a, b, c):
if not Triangle.is_valid(a, b, c):
raise ValueError('无效的边长,无法构成三角形')
self.a = a
self.b = b
self.c = c
@staticmethod
def is_valid(a, b, c):
"""判断三条边长能否构成三角形(静态方法)"""
return a + b > c and a + c > b and c + b > a
def perimeter(self):
perimeter = self.a + self.b + self.c
return perimeter
def area(self):
p = (self.a + self.b + self.c) / 2
area = (p * (p - self.a) * (p - self.b) * (p - self.c)) ** 0.5
return area
if __name__ == '__main__':
print('输入三条边长:')
a, b, c = map