`

【转】飘逸的python - @staticmethod和@classmethod的作用与区别

 
阅读更多

原文地址:http://blog.csdn.net/handsomekang/article/details/9615239

 

 

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。

而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。

这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

 

既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢

从它们的使用上来看,

  • @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
  • @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。

而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。

下面上代码。

 

[python] view plaincopy
 
  1. class A(object):  
  2.     bar = 1  
  3.     def foo(self):  
  4.         print 'foo'  
  5.  
  6.     @staticmethod  
  7.     def static_foo():  
  8.         print 'static_foo'  
  9.         print A.bar  
  10.  
  11.     @classmethod  
  12.     def class_foo(cls):  
  13.         print 'class_foo'  
  14.         print cls.bar  
  15.         cls().foo()  
  16.   
  17. A.static_foo()  
  18. A.class_foo()  

输出
static_foo
1
class_foo
1
foo

分享到:
评论

相关推荐

    Python @函数装饰器及@staticmethod,@classmethod.docx

    使用 @ 符号引用已有的函数(比如 @staticmethod、@classmethod)后,可用于修饰其他函数,装饰被修饰的函数。那么我们是否可以开发自定义的函数装饰器呢? 答案是肯定的。当程序使用“@函数”(比如函数 A)...

    Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析

    主要介绍了Python 类方法和实例方法(@classmethod),静态方法(@staticmethod),结合实例形式分析了Python 类方法和实例方法及静态方法相关原理、用法及相关操作注意事项,需要的朋友可以参考下

    Python中staticmethod和classmethod的作用与区别

    今天小编就为大家分享一篇关于Python中staticmethod和classmethod的作用与区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    my cpytest --python test frame

    python test ''' Created on 2011-11-2 @author: ACER ''' import glob, os from testframe.TestSuite import * class PyTestRunner: @staticmethod def run(suite): TestSuite.run(suite) @staticmethod ...

    python的staticmethod与classmethod实现实例代码

    主要介绍了python的staticmethod与classmethod实现实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    超全面python面试题

    3 @staticmethod和@classmethod 4 类变量和实例变量 5 Python自省 6 字典推导式 7 Python中单下划线和双下划线 8 字符串格式化:\x和.format 9 迭代器和生成器 10 *args and **kwargs 11 面向切面编程AOP和装饰器 12 ...

    基于python中staticmethod和classmethod的区别(详解)

    下面小编就为大家带来一篇基于python中staticmethod和classmethod的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Python面试内容很多,干货满满

    3 @staticmethod和@classmethod 。 4 类变量和实例变量 o 5 Python自省 。6字典推导式 。 7 Python中单下划线和双下划线 。8 字符串格式化:\x和.format 。 9 选代器和生成器 10*args and **kwargs 。 11 面向切面...

    python练手经典100例-推荐几个适合新手练手的Python项目《python入门例子》.pdf

    ⾄于说没有run()没有参数self,⽽是参数cls,为什么可⽤,那就是装饰器@classmethod在起作⽤了,理解了装饰器,就知道这个问题的 答案了。不然的话,还有@staticmethod可以让⽅法连cls⽅法都不需要⼜怎么说。 ...

    Python 面向对象静态方法、类方法、属性方法知识点小结

    (1)静态方法–》-@staticmethod装饰类中方法 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性 class Dog(object): def __init__(self,name): self.name = name @staticmethod #实际上跟...

    python实现静态方法工具类

    在 Python 中,可以使用模块(Module)来实现将一些工具方法打包到一个文件中,并可以在其他代码中直接导入使用。在这个文件中,可以像 Java 中的静态方法一样,定义函数或类方法,只需在函数名或方法名前加上 @...

    深入浅析python 中的self和cls的区别

    而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。:thinking_face: 首先定义一个类A...

    Python语言高频重点汇总

    @staticmethod和@classmethod两个装饰器4. 类属性和实例属性5. Python的自省6. 列表、集合、字典推导式7. Python中单下划线和双下划线8. 格式化字符串中的%和format9. 迭代器和生成器10. args和**kwargs11. 面向切...

    Python 工匠:使用装饰器的技巧

    在做面向对象编程时,我们就经常会用到 @staticmethod和 @classmethod 两个内置装饰器。此外,如果你接触过 click 模块,就更不会对装饰器感到陌生。click 最为人所称道的参数定义接口 @click.option(.

    Pyramid Stereo Matching Network代码理解1-Cosnet部分重点理解

    而使用@staticmethod或@classmethod,不需要实例化,直接类名.方法名()来调用。 空洞残差网络结构 self.conv1 = StackedBlocks(n_blocks=3, in_channels=32, out_channels=32, kernel_size=3, stride=1, padding=1, ...

    1 python的三种类方法

    1 类方法 @classmethod :基于类的一些属性进行调用,第一个参数是cls 2 静态方法 @staticmethod: 本质上和普通函数没什么不同,归集到一个类下面,相当于整理 3 实例方法 :需要结合对象的实例使用,第一个参数是cls

    python面向对象day03.txt

    类方法(行为) @classmethod @classmethod def 类方法名(cls, .....): .... 静态方法 @staticmethod 类名.静态方法名(传参) 对象.静态方法名(传参) 类内的 __slots__ 列表属性 class Student: __slots__ =...

    python 递归调用返回None的问题及解决方法

    主要介绍了python 递归调用返回None的问题,本文通过实例代码给大家记录了解决方案,代码简单易懂,非常不错对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    Python 随机生成中文验证码的实例代码

    python代码复制代码 代码如下: # -*- coding: utf-8 -*-  import Image,ImageDraw,ImageFont  import random  import math, string   class RandomChar():  “””用于随机生成汉字”””  @...

    Python拾趣009 修饰器@简介和简单应用

    在写类的时候经常用到@staticmethod或@classmethod修饰符,这样就可以不需要实例化,直接类名.方法名()来调用。 所以修饰器用到好多地方的。 例子 PyQt AND OpenCV By LiNYoUBiAo 2020/4/19 19:49 from functools...

Global site tag (gtag.js) - Google Analytics