classmethod与staticmethod内置装饰器

classmethod与staticmethod内置装饰器

1、classmethod

  是一个装饰器,给在类内部定义方法装饰,将类内部的方法变为 “类的绑定方法”

 

class DB:
    __data = "tom is very cute"
    def __init__(self, user, pwd, role):
        self.user = user
        self.pwd = pwd
        self.role = role

    @classmethod
    def check_db(cls, user, pwd, role):    # cls指的是类
        # 在类方法内部调用类产生一个实例  --->  对象
        obj = cls(user, pwd, role)
        # 查看数据前必须通过校验
        if obj.user == "root" and obj.pwd == "123" and obj.role == "admin":
            return cls.__data

print(DB.check_db("root", "123", "admin"))

  执行结果:

tom is very cute

 

2、staticmethod

  staticmethod:静态方法

  是一个装饰器,给在类内部定义方法装饰,将类内部的方法变为 “非绑定方法”

 

class Foo:

    @staticmethod
    # staticmethod装饰器将该方法变成 "非绑定方法",由于func方法中的self没有任何意义,所以可以删除self参数,调用时也无需传参
    # 注意:删除self之后该方法与此类无任何绑定关系
    def func():    # 此方法与普通函数一样
        print("123")

obj = Foo()
# 对象调用非绑定方法
obj.func()

# 类调用非绑定方法
Foo.func()

  执行结果:

123
123

 

3、绑定方法总结

  ① 对象的绑定方法:(在类内部封装(定义)一个方法即可)

    由对象来调用,由谁来调用,会将谁(对象)当做第一个参数传入

 

  ② 类的绑定方法:(在类内部方法中,使用classmethod装饰器即可)

    由类来调用,由谁来调用,会将谁(类)当做第一个参数传入

 

  ③ 非绑定方法:(在类内部方法中,使用staticmethod装饰器即可)

    可以由对象或者类来调用,谁来调用都是一个普通方法(普通函数),方法需要传入几个参数,调用时候就得传入几个参数

posted @ 2020-10-27 18:02  chchcharlie、  阅读(153)  评论(0编辑  收藏  举报