面向对象编程之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装饰器即可

python基础-内置装饰器classmethod和staticmethod的更多相关文章

  1. python基础之内置装饰器

    装饰器 简介 功能与格式 内置装饰器 @classmethod @propertry @staticmethod 其它 ---------------------------------------- ...

  2. python内置装饰器

    前言 接着上一篇笔记,我们来看看内置装饰器property.staticmethod.classmethod 一.property装饰器 1. 普通方式修改属性值 code class Celsius ...

  3. python基础语法16 面向对象3 组合,封装,访问限制机制,内置装饰器property

    组合: 夺命三问: 1.什么是组合? 组合指的是一个对象中,包含另一个或多个对象. 2.为什么要用组合? 减少代码的冗余. 3.如何使用组合? 耦合度: 耦: 莲藕 ---> 藕断丝连 - 耦合 ...

  4. python进阶04 装饰器、描述器、常用内置装饰器

    python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...

  5. classmethod、staticclassmethod内置装饰器函数

    # method 英文是方法的意思 # classmethod 类方法 # 当一个类中的方法中只涉及操作类的静态属性时,此时在逻辑上,我们想要直接通过类名就可以调用这个方法去修改类的静态属性,此时可以 ...

  6. python设计模式之内置装饰器使用(四)

    前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...

  7. python基础——内置函数

    python基础--内置函数  一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...

  8. property内置装饰器函数和@name.setter、@name.deleter

    # property # 内置装饰器函数 只在面向对象中使用 # 装饰后效果:将类的方法伪装成属性 # 被property装饰后的方法,不能带除了self外的任何参数 from math import ...

  9. python基础-内置函数详解

    一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highlight=built#ascii ...

随机推荐

  1. 【mysql】pymysql.err.InterfaceError Interface Error: (0, '')

    八成是丢失连接了 while 1: try: self.conn.ping(reconnect=True) self.cur.execute(sql,tuple(item.values())) sel ...

  2. win10 64位安装redis 及Redis Desktop Manager使用

    说多无益,先把redis在win上的开发环境搭一下. redis官方没有64位的Windows下的可执行程序,目前有个开源的托管在github上, 地址:https://github.com/Serv ...

  3. ntp服务设置开机自启动失败

    设置了ntpd开机自启动,重启服务器ntpd没有自启动 1.需要禁掉chronyd.service: systemctl disable chronyd.service 2.手动启动ntpd: sys ...

  4. vue之tab切换

    <style> .active{ color: red; } div a{ display: block; } </style> <script src="ht ...

  5. 初学JavaScript正则表达式(八)

    JavaScript正则贪婪模式与非贪婪模式 贪婪模式: 例: \d{3,6} 匹配数字3到6次(正则表达式默认为贪婪模式,即匹配最多次,失败即停) '12345678'.replace(/\d{3, ...

  6. STP配置和选路规则

    1.用四台S3700交换机,2台PC机,组建网络拓扑 2.对mengyu-S1进行设置 (1)在交换机启用生成树(华为交换机默认启用MSTP),将交换机的STP模式更改为普通生成树STP: (2)配置 ...

  7. 201871010111-刘佳华《面向对象程序设计(java)》第十一周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第十一周学习总结 实验九  泛型程序设计技术 实验时间 2019-11-8 1.实验目的与要求 (1) 理解泛型概念: (2 ...

  8. pycharm安装pymysql包

    1.为什么? 每个程序连接数据库,python开发2.*版本可以直接使用MySQL,python3.*版本需要下载使用PyMySQL包才能连接数据库... 2. 怎么做? 2.1. 更改源:pycha ...

  9. Gin实现依赖注入

    前言 依赖注入的好处和特点这里不讲述了,本篇文章主要介绍gin框架如何实现依赖注入,将项目解耦. 项目结构 ├── cmd 程序入口 ├── common 通用模块代码 ├── config 配置文件 ...

  10. Chrome保存整个网页为图片

    打开需要保存为图片的网页 然后按F12,接着按Ctrl+Shift+P 在红框内输入full 点击下面的“Capture full size screenshot”就可以保存整个网页为图片了 原文出处 ...