原文地址:http://blog.csdn.net/handsomekang/article/details/9615239
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。
而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。
这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。
既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢
从它们的使用上来看,
- @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
- @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。
而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。
下面上代码。
- 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()
输出
static_foo
1
class_foo
1
foo
相关推荐
使用 @ 符号引用已有的函数(比如 @staticmethod、@classmethod)后,可用于修饰其他函数,装饰被修饰的函数。那么我们是否可以开发自定义的函数装饰器呢? 答案是肯定的。当程序使用“@函数”(比如函数 A)...
主要介绍了Python 类方法和实例方法(@classmethod),静态方法(@staticmethod),结合实例形式分析了Python 类方法和实例方法及静态方法相关原理、用法及相关操作注意事项,需要的朋友可以参考下
今天小编就为大家分享一篇关于Python中staticmethod和classmethod的作用与区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
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实现实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
3 @staticmethod和@classmethod 4 类变量和实例变量 5 Python自省 6 字典推导式 7 Python中单下划线和双下划线 8 字符串格式化:\x和.format 9 迭代器和生成器 10 *args and **kwargs 11 面向切面编程AOP和装饰器 12 ...
下面小编就为大家带来一篇基于python中staticmethod和classmethod的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
3 @staticmethod和@classmethod 。 4 类变量和实例变量 o 5 Python自省 。6字典推导式 。 7 Python中单下划线和双下划线 。8 字符串格式化:\x和.format 。 9 选代器和生成器 10*args and **kwargs 。 11 面向切面...
⾄于说没有run()没有参数self,⽽是参数cls,为什么可⽤,那就是装饰器@classmethod在起作⽤了,理解了装饰器,就知道这个问题的 答案了。不然的话,还有@staticmethod可以让⽅法连cls⽅法都不需要⼜怎么说。 ...
(1)静态方法–》-@staticmethod装饰类中方法 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性 class Dog(object): def __init__(self,name): self.name = name @staticmethod #实际上跟...
在 Python 中,可以使用模块(Module)来实现将一些工具方法打包到一个文件中,并可以在其他代码中直接导入使用。在这个文件中,可以像 Java 中的静态方法一样,定义函数或类方法,只需在函数名或方法名前加上 @...
而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。:thinking_face: 首先定义一个类A...
@staticmethod和@classmethod两个装饰器4. 类属性和实例属性5. Python的自省6. 列表、集合、字典推导式7. Python中单下划线和双下划线8. 格式化字符串中的%和format9. 迭代器和生成器10. args和**kwargs11. 面向切...
在做面向对象编程时,我们就经常会用到 @staticmethod和 @classmethod 两个内置装饰器。此外,如果你接触过 click 模块,就更不会对装饰器感到陌生。click 最为人所称道的参数定义接口 @click.option(.
而使用@staticmethod或@classmethod,不需要实例化,直接类名.方法名()来调用。 空洞残差网络结构 self.conv1 = StackedBlocks(n_blocks=3, in_channels=32, out_channels=32, kernel_size=3, stride=1, padding=1, ...
1 类方法 @classmethod :基于类的一些属性进行调用,第一个参数是cls 2 静态方法 @staticmethod: 本质上和普通函数没什么不同,归集到一个类下面,相当于整理 3 实例方法 :需要结合对象的实例使用,第一个参数是cls
类方法(行为) @classmethod @classmethod def 类方法名(cls, .....): .... 静态方法 @staticmethod 类名.静态方法名(传参) 对象.静态方法名(传参) 类内的 __slots__ 列表属性 class Student: __slots__ =...
主要介绍了python 递归调用返回None的问题,本文通过实例代码给大家记录了解决方案,代码简单易懂,非常不错对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
python代码复制代码 代码如下: # -*- coding: utf-8 -*- import Image,ImageDraw,ImageFont import random import math, string class RandomChar(): “””用于随机生成汉字””” @...
在写类的时候经常用到@staticmethod或@classmethod修饰符,这样就可以不需要实例化,直接类名.方法名()来调用。 所以修饰器用到好多地方的。 例子 PyQt AND OpenCV By LiNYoUBiAo 2020/4/19 19:49 from functools...