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

  • 相关阅读:
    正方形矩阵顺时针旋转90度
    225. Implement Stack using Queues
    leetcode上题目的分类
    215. Kth Largest Element in an Array
    Android基础_Service
    Android基础_ContentProvider组件
    java struts学习-拦截器
    Jquery_基础(三) ajax与json
    Jquery_基础(二) 包装集
    Jquery_基础(一) 常用方法与选择器
  • 原文地址:https://www.cnblogs.com/watertaro/p/9419537.html
Copyright © 2011-2022 走看看