zoukankan      html  css  js  c++  java
  • python基础-内置装饰器classmethod和staticmethod

    面向对象编程之classmethod和staticmethod

    classmethodstaticmethod都是python内置的装饰器

    classmethod 的作用:给在类内部定义的方法装饰,将类的内部方法变为类的绑定方法

    绑定方法的特殊之处是会将对象本省当作第一个参数传入方法中

    类的绑定方法:由类来调用,哪个类调用,就默认将哪个类当作第一个参数传入

    class DB:
        __data = "lee is a big haha!"
    
        def __init__(self, user, pwd):
            self.user = user
            self.pwd = pwd
    
        # 查看数据方法
        # 使用classmethod装饰器 让DB类直接调用check_db()
        @classmethod
        def check_db(cls, user, pwd):
            if user == "dawn" and pwd == "123":
                print("校验通过……")
                print(cls.__data)
    
    
    # 一般都是通过创建对象,通过对象.方法() 调用方法
    db_obj = DB("lee", "123")
    db_obj.check_db("dawn", "123")  # 输出结果:校验通过…… lee is a big haha!
    # 给类中的check_db()加上classmethod 装饰,让类直接调用看看
    DB.check_db("dawn", "123") # 输出结果:校验通过…… lee is a big haha!
    

    staticmethod 的作用:给在类内部定义方法中装饰,将类内部的方法变为非绑定方法

    非绑定方法:可以由类或对象来调用。不论是谁调用,方法中有几个参数,就要传入几个传参,跟调用函数的方式一样。

    class Demo:
        @staticmethod
        def func(self):
            print(self)
    
    # 创建对象调用func
    demo = Demo()
    # 理论上,不用传参,但不传参就报错
    demo.func(1234)  # 输出结果:1234
    
    # 通过类调用func
    # 理论上,不用传参,但不传参就报错
    Demo.func(2345) # 输出结果:2345
    

    总结:

    对象的绑定方法

    • 由对象来调用,会将对象当做第一个参数传入给该方法。
    • 实现:在类内部定义(封装)一个方法即可

    类的绑定方法

    • 由类来调用,会将类当做第一个参数传入给该方法。
    • 实现:在类内部方法中,使用classmethod装饰器即可

    非绑定方法

    • 由对象/类来调用,由谁来调用,它都是一个普通函数,内部需要接受几个参数,就得传入几个。
    • 实现:在类内部方法中,使用staticmethod装饰器即可
  • 相关阅读:
    POJ 2752 KMP中next数组的理解
    KMP详解
    HDU 3221 矩阵快速幂+欧拉函数+降幂公式降幂
    POJ 3220 位运算+搜索
    反素数深度分析
    POJ 2886 线段树单点更新
    求反素数的方法
    CV第八课 GPU/CPU
    49. 字母异位词分组
    48. 旋转图像
  • 原文地址:https://www.cnblogs.com/xiaodan1040/p/11957560.html
Copyright © 2011-2022 走看看