python的classmethod和staticmethod方法

知识库文档 staticmethod:静态方法没有类似 self 或 cls 这样的特殊参数,它和普通函数类似,只是定义在类的命名空间中。classmethod:类方法的第一个参数 cls 是类对象本身。可以通过 cls 访问类的属性和调用其他类方法。classmethod可以访问和修改类的属性,可以调用其他类方法,第一个参数为类本身(通常命名为cls)。staticmethod不能访问或修改类的属性,也不能调用其他类方法,它与类和实例无关。python中的classmethod和staticmethod有什么区别? 阅读详情

classmethod:类方法
staticmethod:静态方法

在Python中,静态方法和类方法都是可以通过类对象和类对象实例访问。但是区别是:

  • @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法。 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例。 
  • 普通对象方法至少需要一个self参数,代表类对象实例
  • 类方法有类变量cls传入,从而可以用cls做一些相关的处理。并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类。 对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用,就像C().f(),这里C(),写成这样之后它就是类的一个实例了。 
  • 静态方法则无需参数,staticmethod方法也不能直接访问类成员。它基本上跟一个全局函数相同,一般来说用的很少
例子:
class A(object):  
    bar = 1  
    def foo(self):  
        print 'foo'  
 
    @staticmethod  
    def static_foo():  
        print 'static_foo'  
        print A.bar  
 
    @classmethod  
    def class_foo(cls):  
        print 'class_foo'  
        print cls.bar  
        cls().foo()  
  
A.static_foo()  
A.class_foo() 
类b继承A:
class b(A):
    print 'b is start'
    def class_foo(self):
        print 'b.class_foo'
        #def static_foo(self):
        #print 'b.static_foo'

f1 = b()
print f1.class_foo()
print f1.static_foo()
结果:


说明:实例方法针对的是实例,类方法针对的是类,他们都可以继承和重新定义,静态方法也能继承(NND),可以认为是全局函数。

class MethodTest():
    var1 = "class var"
   
    def __init__(self, var2 = "object var"):
        self.var2 = var2
   
    @staticmethod

    def staticFun():
        print 'static method' 
   
    @classmethod

    def classFun(cls):
        print 'class method'

 

staticmethod和classmethod的相同点:

1.都可以通过类或实例调用

mt = MethodTest()

MethodTest.staticFun()

mt.staticFun()

MethodTest.classFun()

mt.classFun()

2.都无法访问实例成员

    @staticmethod

    def staticFun():
        print var2  //wrong 
    @classmethod

    def classFun(cls):
        print var2  //wrong

 

staticmethod和classmethod的区别:

1.staticmethod无需参数,classmethod需要类变量作为参数传递(不是类的实例)

    def classFun(cls):
        print 'class method'  //cls作为类变量传递

2.classmethod可以访问类成员,staticmethod则不可以

    @staticmethod

    def sta




西门子840D新建项目 1、需要一个32位的WIN7或者XP系统,并且已经在系统中安装完成西门子840Dsl开发包和VS2008。(我采用的是XP系统虚拟机) 2、在开始->所有程序找到如下位置 3、在这个位置打开Visual Studio 4、文件->新建->项目 名称和位置都可以随意更改,点击确定。 5、在左侧选择第二个选项进入下面的界面 点击“Add Screen”按钮 可以修改“class name”然后点击“OK”返回上一个界面,再点击“Add Form” 可以修... 阅读详情

相关推荐

Xilinx PCIe IP核示例工程仿真流程与关键任务解析

本文详细解析了Xilinx PCIe IP核示例工程的仿真流程与关键任务。通过搭建仿真环境、解读初始化日志,并深入剖析TSK_TX_MEMORY_WRITE_32等核心任务的TLP报文生成与交互过程,帮助开发者掌握PCIe IP核的仿真调试方法,为实际硬件设计提供可靠的验证基础。

weixin_28314575的博客 507

Python方法:@staticmethod和@classmethod

在常用的Python方法中,我们调用类的方法,每次都需要进行实例化,然后用实例化.方法进行调用。Python方法@staticmethod和@classmethod,可以被类直接调用,也可以被所有实例化对象共享。只要在某个方法前面加上@staticmethod或@classmethod就可以了,该方法通过调用staticmethod并且这样子还,把某些应该属于某个类的函数给放到那个类里去,同时。

Python,数据分析,机器学习,深度学习 7498

IEEE Transactions on Industrial Informatics(TII)投稿全流程解析:从准备到成功提交

本文详细解析了向IEEE Transactions on Industrial Informatics(TII)投稿的全流程,涵盖从投稿前的格式准备、内容结构优化到在线提交系统实操等关键环节。重点强调了遵守TII严格的格式规范、双盲评审要求以及如何构建有说服力的学术叙述,旨在帮助研究者提升稿件质量,顺利通过评审。

weixin_28396629的博客 1864

Python中 staticmethod 和 classmethod 的区别

类方法:第一个参数 cls 代表类本身(等价),通过「 cls.静态变量 」或「 类名.静态变量 」引用静态变量,利用「 cls.方法名() 」或「 类名.方法名() 」去调用静态方法和类方法;如果需要调用普通方法,需要先实例化一个对象,然后利用对象去调用普通方法。self和cls的区别不是强制的,只是PEP8中一种编程风格,slef通常用作实例方法的第一参数,cls通常用作类方法的第一参数。静态方法和类方法是针对类定义的,除了可以使用类名去调用,也可以使用实例对象去调用,但是不建议使用实例对象调用。

any1where的博客 4569

0032期基于深度学习的大米识别-含数据集

083基于深度学习的手势识别小程序版本_含10多种模型包括alexnet、DenseNet、DLA、GoogleNet、Mobilenet、ResNet、ResNeXt、ShuffleNet、VGG、EfficientNet和Swin transformer等10多种模型。117nlp自然语言处理-文本情感分类-joy-sadness-anger-fear-love-surprise。运行02深度学习模型训练.py就会将txt文本中记录的训练集和验证集进行读取训练,训练好后会保存模型在本地。

grehtsfrs的博客 1507

Python爬虫实战:如何优雅地处理BOSS直聘的反爬机制与Cookie失效问题

本文详细介绍了如何通过Python爬虫技术优雅应对BOSS直聘的反爬机制与Cookie失效问题。从多账号轮换、动态请求头生成到代理IP管理,提供了一套完整的解决方案,帮助开发者构建稳定高效的数据采集系统,有效提升爬虫成功率与数据质量。

weixin_30733003的博客 1562

@staticmethod和@classmethod的区别

类方法可以访问和修改类属性,并且它也可以被继承和覆盖。例如,如果你有一个类的构造函数需要额外的参数,但你又希望提供一种更方便的方式来创建对象,那么可以使用类方法。当你需要在方法内部访问类的上下文或类级别的资源,并且希望在方法中进行操作的时候,使用类方法可以提供一种方便的方式。例如,如果你有一个类的构造函数需要额外的参数,但你又希望提供一种更方便的方式来创建对象,那么可以使用类方法。

fengxiaoyangfeng的博客 593

CKS-CN考试之路----11

显然是alpine-b的镜像有libcrypto3-3.1.4-r5。新版本发布老版本会被回收,此时pod只剩下2个container。我们依次测试是哪个镜像里包含libcrypto3。可以看到alpine的pod有3个副本.

Q先生 652

Python中 staticmethod 和 classmethod 的区别与具体实例

Python中 staticmethod 和 classmethod 的区别与具体实例

gzxgongzhengxuan的博客 1052

Android AVB 分析(十二)嵌入式设备安全中的 dm-verity 简介

上一篇 《Android AVB 分析(十一)bootloader 是如何进行 verify boot 检查的?》 分析了 bootloader 中是如何调用 libavb 函数库验证 vbmeta 和 boot 等分区的。接下来就打算写一篇介绍 dm-verity 原理的文章,然后再写一篇徒手 dm-verity 实践的文章,结果偶然发现了本篇的英文原版。写得太好,我觉得自己完全没有必要再写原理了。由于原文是英文,有些英语不太好的朋友不一定能完全理解。我花了点时间,结合 AI 将英语原文翻译成中文。

洛奇看世界 3598

计算机视觉论文复现指南:从理论到可运行代码的保姆级教程

计算机视觉论文复现指南:从理论到可运行代码的保姆级教程​ ,人工智能,计算机视觉,大模型,AI,本文围绕计算机视觉论文复现展开,介绍从理论到可运行代码的全流程。先强调复现的重要性,再讲解复现前的准备,包括明确目标、构建工具链;接着说明代码获取分析、环境配置调优、调试运行技巧及结果验证优化方法,还推荐了高效工具,提及复现中的伦理规范。旨在助读者掌握复现方法论,实现从经典模型到前沿论文的复现,推动学术成果落地。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 12万+

python中 classmethod、staticmethod和普通方法的区别

python中 classmethod、staticmethod和普通方法的区别这三种方法在类和实例中都存在,都可被调用,但调用的时候默认默认传递的参数不同。对于classmethod方法当实例调用classmethod方法时,默认会把当前实例所对应的类传进去 当类调用classmethod方法时,默认把此类传进去对于staticmethod方法实例和类调用,没有默认的参数传进函数对于普通方法当实

u010157603的专栏 4038

Roboguide与TIA V16通讯

Roboguide与TIA V16通讯

haier123888的博客 2676

浅谈python的classmethod staticmethod和实例方法

文章目录前言一、classmethod staticmethod二、绑定对象三、调用方式 前言 今天说说python类中的类方法,静态方法和实例方法。 一、classmethod staticmethod Python中3种方式定义类方法, 常规方式, @classmethod修饰方式, @staticmethod修饰方式。 import _ctypes class A(object): def foo(self, x): print("executing foo(%s,%s

qq_43108684的博客 760

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python classmethod方法 和 staticmethod

classmethod()   是一个类方法,用来装饰对应的函数。被classmethod 装饰之后就无需实例化,也不需要在函数中传self,但是被装饰的函数第一个参数需要是cls来表示自身类。可以用来调用类的属性,类的方法,实例化对象。 示例:    class A(object): # 属性默认为类属性(可以给直接被类本身调用) num = "类属性"...

weixin_30433075的博客 97

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Python中的类方法classmethod、静态方法staticmethod和属性方法property

1 类方法classmethod Python中可以通过装饰器@classmethod将一个方法变成类方法,类方法只能访问类变量,不能访问实例变量 class Animal(object): name = "kitty" def __init__(self, name, age): print(self) self.name = name self.age = age @classmethod def run(self):

weixin_43989215的博客 265

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python:类(class)静态方法(staticmethod)和类方法(classmethod)

当定义类时,有两种特殊类型的方法:静态方法(staticmethod)和类方法(classmethod)。它们可以在类中定义,与实例化的对象无关。

weixin_42046845的博客 2322

Python里的类方法(classmethod)和静态方法(staticmethod)

我们先来定义一个普通的类 class Demo: def __init__(self): pass def common_method(self): # 这是一个普通方法 print("this is a common method") demo = Demo() demo.common_method() 在上面这块代码中,我们可以看到,类里面的普通方法,我们必须先把类实例化后才能引用。那有没有一种办法,我们不用实例化直接引用呢? 这儿介绍第一种特

weixin_44333824的博客 617

Classmethod and Staticmethod - Python 类方法 和 静态方法

1 classmethod and staticmethod 2 classmethod 的是一个参数是类对象 cls (本类,或者子类), 而不是实例对象 instance (普通方法). classmethod 即可以通过'类'调用 - cls.classfunc(), 3 也可以同通过实例调用('The instance is ignored except fo...

weixin_30274627的博客 92

Python中 staticmethod静态方法和classmethod类方法

class C(object): # 静态方法 @staticmethod def f(): print('runoob') class A(object): bar = 1 def func1(self): print ('foo') # 类方法 @classmethod def fun...

wto882dim的博客 581

关于python中的类方法(classmethod)和静态方法(staticmethod)

首先明确两点: a)python在创建类的时候,self指向的是类的实例而不是类属性! b)我们所创建的类的方法有两种作用,一种是改变类的属性,一种是改变实例的属性,这点一定要分清! c)我们在调用类的一般的方法的时候,是将实例本身传递给方法! 现在我们来说一下主要的三种类的方法: 实例方法、classmethod(类方法)、staticmethod(静态类方法): 简单介绍一下它们的...

weixin_30342827的博客 189

系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[使用静态方法和类方法]

此外,Python3.X也允许类中的简单函数只在通过一个类对象调用的时候充当静态方法的角色,而不需要额外的协议,从而扩展了这一模式。除了前面文章中提到的之外,目前还有另一个选择,可以编写和类相关联的、能通过类及其实例被调用的简单函数。从Python2.2起,我们可以编写带有静态方法和类方法的类,两者在调用时都不需要传人实例参数。内置方法还可以允许这样的方法在Python3.X中通过一个实例调用,而在Python2.X中同时可以通过类和实例调用(也就是说,前者在Python3.X中没有。

冯·诺依曼 1446

Python编程-staticmethod 和 classmethod 和 实例方法

众所周知,类是创建实例的模板,而实例是一个个具体的对象,各个实例拥有的数据相互独立、互不影响。 在类中定义的函数称为方法,主要有三种:实例方法、类方法、静态方法 class A: def instance_method(self, n): print('self', self) @classmethod def class_method(cls, ...

数据之美的博客 418

python classmethod_Python 普通方法和staticmethod与classmethod的区别

class A(object):def foo(self,x):print "executing foo(%s,%s)"%(self,x)@classmethoddef class_foo(cls,x):print "executing class_foo(%s,%s)"%(cls,x)@staticmethoddef static_foo(x):print "executing static_f...

weixin_39739234的博客 61

python3中类的方法_(转)关于python3中staticmethod(静态方法)classmethod(类方法)实例方法的联系和区别...

原文:http://dmcoders.com/2017/08/30/pythonclass/https://zhuanlan.zhihu.com/p/28010894------正确理解Python中的 @staticmethod@classmethod方法https://blog.youkuaiyun.com/jypfhx/article/details/75045471---python学习系列---st...

weixin_39837139的博客 120

系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[基础知识]

我们可以在类中定义两种方法,它们不需要一个实例就可以被调用:静态方法(staticmethod)大致与一个类中简单的无实例函数的工作方式类似,而类方法则被传人一个类而不是一个实例。尽管这一功能与前面的文章所介绍的新式类被一起添加,静态方法(staticmethod)和类方法(classmethod)也对经典类也是有效的。这两个函数对于在Python2.X中开启这些模式是必要的,而且在Python3.X中通常也是需要的。在Python3.X中,无实例的方法只通过一个类名调用,而不需要一个。

冯·诺依曼 1281
上一篇: Windows 7下Git SSH 创建Key的步骤
下一篇: 获取当前执行主脚本目录,sys.path.append导入模块
一醉不醒
博客等级 码龄18年 15粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值