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

Posted 城南花已开

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象之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






以上是关于面向对象之classmethod和staticmethod(python内置装饰器)的主要内容,如果未能解决你的问题,请参考以下文章

面向对象之self classmethod staticmethod

python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)多态封装的特性property

what' the python之面向对象(进阶)

三 面向对象之绑定方法与非绑定方法

通俗易懂之Python 面向对象中的方法及属性

通俗易懂之Python 面向对象中的方法及属性