首页 技术 正文
技术 2022年11月15日
0 收藏 358 点赞 2,259 浏览 1359 个字

例子

?

12345678910111213 class A(object):  def foo(self,x):    print "executing foo(%s,%s)"%(self,x)   @classmethod  def class_foo(cls,x):    print "executing class_foo(%s,%s)"%(cls,x)   @staticmethod  def static_foo(x):    print "executing static_foo(%s)"%x   a=A()

上述类有三个函数,使用如下:

?

123456789101112131415161718 a.foo(1)# executing foo(<__main__.A object at 0xb7dbef0c>,1) ----------------------------------------------------------------- a.class_foo(1)# executing class_foo(<class '__main__.A'>,1) A.class_foo(1)# executing class_foo(<class '__main__.A'>,1) ----------------------------------------------------------------- a.static_foo(1)# executing static_foo(1) A.static_foo('hi')# executing static_foo(hi)

区别

• foo()的调用者必须是类A的一个实例,class_foo()与static_foo()的调用者既可以是类也可以是某个实例

• 参数不同,foo() 参数为self和其他参数,class_foo()参数使用类(cls)替换了self,static_foo()则只有参数,没有self和类(cls)

• a.foo(1)中的foo()与a是绑定的,class_foo()是与类绑定的,而static_foo()与这两者都没有绑定,可以使用print来查看,如下:

?

123456789101112131415 ```print(a.foo)# <bound method A.foo of <main.A object at 0xb7d52f0c>> print(a.class_foo)# <bound method type.class_foo of <class 'main.A'>> print A.class_foo<bound method classobj.class_foo of > print(a.static_foo)# print(A.static_foo)# ```

作用

• 使用场景:classmethod在一些工厂类的情况下使用较多,也就是说OOP里继承的时候使用,staticmethod一般情况下可以替换为外部的函数,后者继承的时候不可更改,和C++/JAVA中的静态方法很相似

• 有利于组织代码,同时有利于命名空间的整洁

以上这篇基于python中staticmethod和classmethod的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,964
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,486
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,331
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,114
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,747
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,781