静态方法和类方法
静态方法
声明:使用装饰器@staticmethod
调用:类.静态方法()
特点:没有默认的参数
使用规则:实现函数的功能不需要对象,静态方法声明的函数属于当前类,但是不属于该类创建的对象。
例如声明一个计算三角形面积的类,但是在计算三角形面积之前需要判断三条边是否能够构建成一个三角形,在判断之前没有用到该类的属性,那就可以使用静态方法
from mant import sqrt
class Triangle:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
@staticmethod
def valid(a, b, c):
return a + b > c and a + c > b and b + c > a
def perimeter(self):
return self.a + self.b + self.c
def area(self):
half = self.perimeter() / 2
return sqrt(half * (half - self.a) * (half - self.b) * (half - self.c) )
def main():
a, b, c = 3, 4, 5
if Triangle.valid(a, b, c):
t = Triangle(a, b, c)
print(t.perimeter())
print(t.area())
else:
print('不能构成一个三角形')
if __name__ == '__main__':
main()
类方法
声明:使用装饰器@classmethod
调用:类.类方法()
特点:自带参数cls,表示当前类相关的信息对象,通过这个对象可以获取和类相关的信息并且还可以创建出类的对象
使用规则:当函数的功能不需要函数的对象属性,需要类的字段的时候,使用类方法。
创建一个时钟类,实现像表一样走字的功能
from time import time, localtime, sleep
class Clock:
"""时钟类"""
def __init__(self, hour=0, minute=0, second=0):
self.hour = hour
self.minute = minute
self.second = second
@classmethod
def now_time(cls):
"""获取当前时间"""
t = localtime()
return cls(t.tm_hour, t.tm_min, t.tm_sec)
def run(self):
"""开始走字"""
self.second += 1
if self.second == 60:
self.minute += 1
self.second = 0
if self.mnute == 60:
self.hour += 1
self.minute = 0
if self.hour == 24:
self.hour = 0
def show(self):
"""显示时间"""
return '%02d:%02d:%02d' % (self.hour, self.minute, self.second)
def main():
# 通过类方法创建对象并且获取当前时间
clock = Clock().now_time()
while True:
print(clock.show())
sleep(1)
clock.run()
if __name__ == '__main__':
main()