面向对象之classmethod和staticmethod(python内置装饰器)

TOC

对象的绑定方法复习

  • 由对象来调用
  • 会将对象当做第一个参数传入
  • 若对象的绑定方法中还有其他参数,会一并传入

classmethod

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

  • 由类来调用
  • 会将类作为第一个参数传入
  • 若类的绑定方法中还有其他参数,会一并传入
class DB:
    __data = '宝藏的地点在贵州'

    def __init__(self, user, pwd):
        self.user = user
        self.pwd = pwd

    @classmethod  # 使用类的绑定方法,会将类作为第一个参数传入,因此cls此时就是DB类
    def check_db(cls, user, pwd):  # 并将'wrx'和'123'传入
        # 在类方法内部调用类产生一个实例--->obj
        # 调用类的时候会自动把obj作为第一个参数传入类中的self中,并把cls()括号里面的参数一并传入__init__,并执行__init__
        obj = cls(user, pwd)  # obj = DB('wrx', '123')
        if obj.user == 'wrx' and obj.pwd == '123':
            print(cls.__data)  # db类中有这个属性,因此可以获得


DB.check_db('wrx', '123')  # 此时是类在调用类中的方法,因此只会把括号后面的参数传入方法中

staticmethod

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

  • 可以由对象或类来调用,谁来调用都是一个普通方法(普通函数),方法需要传入几个参数,就得传入几个。
import uuid  # 用于产生随机字符串的模块
# 由时间戳以及某种算法组合而成,会产生一串世界上独一无二的字符串


class Foo:
    @staticmethod
    def func(res):
        print(res)


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

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


>>>123
>>>321




原文地址:https://www.cnblogs.com/cnhyk/p/11953497.html