zoukankan      html  css  js  c++  java
  • python之内置装饰器(property/staticmethod/classmethod)

    python内置了property、staticmethod、classmethod三个装饰器,有时候我们也会用到,这里简单说明下

    1、property

    作用:顾名思义把函数装饰成属性

    一般我们调用类方法成员,都是如下写法:

    class propertyTest():
        def __init__(self,x,y):
            self.x = x
            self.y = y
    
        def square(self):
            return self.x * self.y
    
    pt = propertyTest(3,5)
    print(pt.square())
    

    这里一看square就是类的一个方法,但如果把他写成如下形式,那么就不确定调用的一定是类方法:

    class propertyTest():
        def __init__(self,x,y):
            self.x = x
            self.y = y
    
        @property
        def square(self):
            return self.x * self.y
    
    pt = propertyTest(3,5)
    print(pt.square)
    

    这里调用方法类似调用了一个成员变量一样,如果写成print(pt.square())编译器会报错

    这就是property的用法, 把一个方法变成一个变量来调用

    2、staticmethod

    作用:不需要实例化,直接可以调用类中的方法,如下所示

    class A():
        def __init__(self):
            pass
    
        @staticmethod
        def plus(x,y):
            print(x*y)
    
    c = A()
    c.plus(2,3)
    A.plus(4,5)
    

    我们可以实例化类A,然后调用方法plus,也可以直接类.方法调用

    3、classmethod

    作用:和staticmethod类似,不同的是把调用的类作为第一个参数传入,如下:

    class A():
        def __init__(self):
            pass
    
        @classmethod
        def plus(cls,x,y):
            print(cls)
            print(x*y)
    
    A.plus(4,5)
    c = A()
    c.plus(5,6)
    

    这里print(cls)打印的是类A,其他用法同staticmethod

  • 相关阅读:
    hdu 1047 Integer Inquiry
    大数模板(高精度)
    git 学习
    java List 排序
    简单排序总结
    JDK1.8
    webservice 学习笔记 1
    inline-block,inline,block,table-cell,float
    mybatis 学习视频总结记录
    left join right inner join 区别
  • 原文地址:https://www.cnblogs.com/watertaro/p/9419537.html
Copyright © 2011-2022 走看看