zoukankan      html  css  js  c++  java
  • 面向对象之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




  • 相关阅读:
    将python的代码文件打包成可执行文件
    SpringBoot整合JdbcTemplate连接Mysql
    Golang开发环境搭建
    java中的Lamdba表达式和Stream
    MySQL 优化1
    MySQL you *might* want to use the less safe log_bin_trust_function_creators variable
    MySQL mysqlbinlog
    MySQL 事件调度器
    MySQL 忘记密码解决办法
    MySQL 创建自定义函数(2)
  • 原文地址:https://www.cnblogs.com/cnhyk/p/11953497.html
Copyright © 2011-2022 走看看