Python静态方法和类方法

静态方法和类方法

静态方法

声明:使用装饰器@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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值