详解python中@classmethod和@staticmethod方法
作者:shaoyishi 发布时间:2022-10-24 11:47:16
标签:python,@classmethod,@staticmethod
在python类当中,经常会遇到@classmethod和@staticmethod这两个装饰器,那么到底它们的区别和作用是啥子呢?具体来看下。
@classmethod :默认有一个cls参数,用类或对象都可以调用。
@staticmethod:静态方法,无默认参数,用类和对象都可以调用。
1.@staticmethod:
我们看下代码:
class A:
def f1(x):
print(x)
A.f1(2) # 2 类.函数
创建一个类,通过类调用函数。
class A:
@staticmethod
def f1(x):
print(x)
A.f1(2) # 2 类.静态方法
A().f1(2) # 2 对象.静态方法 这种情况下是可以执行的,如果上述f1没有被staticmethod装饰那么就会报错!!!
创建一个类,通过类调用函数。同时,因为该方法被staticmethod装饰器装饰了,那么通过对象.方法也是可以调用的。
所以在类中,通过@staticmethod装饰的函数,可以直接被类调用,也可以被实例化后的对象调用!!!
同时,发现@staticmethod装饰的函数根本不需要传递self这个参数。因为被@staticmethod装饰的函数是直接绑定在类上而不是对象上。
2.@classmethod:
class A:
@classmethod
def f1(cls,x):
print(x)
A.f1(2) # 2 类.方法
A().f1(2) # 2 对象.方法
创建一个类,通过类调用函数。同时,因为该方法被classmethod装饰器装饰了,那么通过对象.方法也是可以调用的。但注意,在被装饰方法中,必须传递cls参数!!!
class B:
name = 'bruce'
age = 16
@classmethod
def f1(cls,x):
print(x)
print(cls.age)
print(cls.name)
B().f1(1)
# 1
# 16
# bruce
上述中,说明被classmethod装饰后的方法,通过cls参数,在该方法中,可以调用该类的属性。
class C:
@classmethod
def f1(cls,x):
print(x)
cls().f2()
def f2(self):
print('hello world')
C.f1(1) 或者 C().f1(1)# 1<br># hello world
上述中,说明被classmethod装饰后的方法,通过cls参数,在该方法中,可以调用该类的其他方法。
所以在类中,通过@classmethod装饰的函数,首先在方法中必须传递第一个参数cls, 该函数可以被类直接调用,也可以被对象调用!!!
同时,因为传递了一个cls,所以可以调用类中的其他属性和方法。
来源:https://www.cnblogs.com/shaoyishi/p/16790680.html
0
投稿
猜你喜欢
- 如何远程注册DLL?试试下面的代码:<% Response.Buffer = True %&g
- 本文实例分析了python字典排序的方法。分享给大家供大家参考。具体如下:1、 准备知识:在python里,字典dictionary是内置的
- ThinkPHP的分组功能是广为开发者使用的一个具有很大实用价值的功能,该功能可以解决中大型项目情况中MVC分层文件过多导致不易管理的问题。
- 项目中想使用以前的代码,或者什么样的需求致使你需要导入外部的包如果是web 下,比如说django ,那么你新建一个app,把你需要导入的说
- 其中 offset and fetch 最重要的新特性是 用来 分页,既然要分析 分页,就肯定要和之前的分页方式来比较了,特别是 Row_N
- 1、什么是AspJpeg?AspJpeg是一款功能强大的基于Microsoft IIS环境的图片处理组件,网络上对其进行详细和深入介绍的中文
- 按照CSS规范,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联盒子(通常是文本)的排列。因此当其高度超出包含
- 这篇文章主要介绍了django自定义模板标签过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- ASP调用WEBSERVICE----INDEX----1. soap请求方式2. post请求方式3.&
- 本文实例讲述了Python实现的计算器功能。分享给大家供大家参考,具体如下:源码:# -*- coding:utf-8 -*-#! pyth
- 本文实例为大家分享了Python九宫格图片生成的具体代码,供大家参考,具体内容如下利用Image类将一张图片分割成9张,发朋友圈利器,打包成
- 事先在网上搜索了一大圈,头都大了,看到那么多文章写道在python里安装psycopg2的各种坑和各种麻烦,各种不成功。搜索了一下午,索性外
- plt.cm中cm全称表示colormappaired表示两个两个相近色彩输出,比如浅蓝、深蓝 ;浅红、深红;浅绿,深绿这种。补充:【pyt
- 现在正在搞三层开发,用ASP和VB6.0,但是现在苦于没有找到合适的方法来调试自己写的DLL文件,效率相当低。 &n
- 本文主要介绍了一个获得当前数据库对象依赖关系的实用算法,具体示例请大家参考下文:create function&nb
- 很多朋友对FrontPage2003中增加的网页布局功能很感兴趣,现在我们一起来深入了解这一实用功能。 用FrontPage200
- * 表的建立关系数据库的主要特点之一就是用表的方式组织数据。表是SQL语言存放数据、查找数据以及更新数据的基本数据结构。在SQL语言中,表有
- 在给blog加上无刷新搜索和即时验证检测后,又看了下代码,感觉太过麻烦,就把XMLHttpRequest请求封装到一个类里面,用起来方便多了
- 一、直接导入模块import 模块名优点:干净直接import sysprint(sys.path)import os # os是一个模块i
- 啥也不说了,还是看代码吧! [root@yyjk DATABASE]# cat DBI.py# -*- coding: utf-8 -*-