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装饰器即可
原文地址:https://www.cnblogs.com/xiaodan1040/p/11957560.html