`

【转】飘逸的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

    除了通用的函数装饰器,Python 还提供了内置的装饰器 `@staticmethod` 和 `@classmethod`。 - **@staticmethod**:将一个方法标记为静态方法,意味着它不需要实例化对象就可以被调用。 - **@classmethod**:将一个...

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

    类方法是通过`@classmethod`装饰器定义的,它们的第一个参数是`cls`,代表类本身。类方法主要用于处理类级别的操作,而不是特定实例的操作。在`Tool`类中,`show_tool_count`就是类方法,它不依赖于实例对象,而是...

    python-3.8.2-amd64.rar

    1. **类型注解增强**:Python 3.8引入了更多的类型注解功能,如`@classmethod`和`@staticmethod`的类型注解,使得代码更加清晰,有利于静态类型检查工具。 2. **位置参数和关键字参数的分离**:函数调用时,可以明确...

    Python中staticmethod和classmethod的作用与区别

    要理解staticmethod和classmethod的作用与区别,首先需要了解Python中实例方法、静态方法和类方法的基本概念。 实例方法是定义在类中,并以self参数开头的方法。self参数代表的是类的实例对象,即每一个创建出来的...

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

    在Python编程中,`staticmethod`和`classmethod`是两种特殊的方法修饰器,它们用于定义类中的方法,但它们的行为和用途有所不同。下面将详细介绍这两种方法的区别、作用以及何时应该使用它们。 ### `staticmethod` ...

    python的staticmethod与classmethod实现实例代码

    在Python中,我们有三种主要的方式来定义类的方法:普通方法(实例方法)、静态方法(staticmethod)和类方法(classmethod)。这些方法在不同的场景下有着各自的作用。 首先,普通方法(实例方法)是通过`self`...

    python-3.6.2-docs-pdf-a4

    - **类方法与静态方法**:除了实例方法外,Python还允许定义类方法(classmethod)和静态方法(staticmethod),为类和对象提供不同层次的操作。 5. **高级特性**: - **生成器**:Python的生成器允许在迭代过程...

    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-3.10.0-docs-pdf-a4.rar

    - 装饰器改进:新增了 @classmethod 和 @staticmethod 的语法糖,使得装饰器更易读。 - 字符串模板:增强了 f-string 功能,允许在表达式中嵌入变量。 - 改进的匹配模式(Match Statements):引入了新的 `match`...

    staticmethod和classmethod的区别

    python中有三种方法,实例方法、静态方法(staticmethod) 和 类方法(classmethod)

    华中农业大学pythonpython-Day31-35.rar

    - **装饰器**: 通过装饰器实现对函数的功能增强,包括函数计时、日志记录等功能,并讲解了`@staticmethod`和`@classmethod`。 5. **文件与I/O操作** (Day35) - **文件打开与关闭**: 学习了使用`open()`函数打开...

    python-unittest-v2.zip

    - **类级和方法级的装饰器**:如`@classmethod`和`@staticmethod`,可以用来处理类级别的资源初始化和清理。 - **参数化测试**:使用`unittest.TestCase.parametrize`为测试方法提供多组输入和预期输出。 - **...

    python-doc-27-34.rar_python_tu

    6. **面向对象编程**:Python 3中的类和继承的新特性,如类方法(@classmethod)和静态方法(@staticmethod)的使用。 7. **上下文管理器**:介绍with语句和自定义上下文管理器,用于资源的自动获取和释放。 8. **...

    python-3.7.5-docs-pdf-a4.zip

    类的方法可以定义为静态方法(`@staticmethod`)或类方法(`@classmethod`),以适应不同的场景。 Python的异常处理机制通过`try/except`语句来实现,允许开发者捕获并处理程序运行时可能出现的错误。`finally`块确保在...

    python-3.9.5-macos.zip

    2. **类型注解增强**:Python 3.9支持更多的类型注解,比如在类方法中使用`classmethod`和`staticmethod`作为类型注解,提高了代码的可读性和静态分析工具的效率。 3. **性能优化**:3.9.5版本可能包含了一些针对...

    python3.5.3.zip

    4. **新函数特性**:`@classmethod`和`@staticmethod`现在可以接受参数,这提供了一种更灵活的类方法定义方式。 5. **新的内置函数**:包括`ascii()`,用于返回对象的ASCII表示,不包含非ASCII字符;`sorted()`现在...

    python-3_pythondocs中文_python3.8.2文档_python3.8.2下载_python文档_Pytho

    Python 3.8中,`@classmethod`和`@staticmethod`装饰器现在可以直接在类体内部定义,提高了代码的可读性。 5. **模块开发和打包**:对于希望创建自己的Python模块或扩展的开发者,文档会介绍如何编写setup.py文件,...

    python-Day12.rar

    可能介绍了如何定义和使用装饰器,以及`@staticmethod`和`@classmethod`的区别。 8. **模块和包的管理**:可能涉及到Python的包管理工具`pip`,如何安装和卸载第三方库,以及如何创建和发布自己的Python包。 9. **...

    python安装-08-静态方法.ev4.rar

    - 类方法(`@classmethod`装饰器)接收类作为第一个参数(通常命名为`cls`),可以访问类变量,但不能访问实例变量。 - 静态方法既不接收类也不接收实例作为参数,它们完全独立于类的实例。 5. **使用场景** - ...

    超全面python面试题

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

Global site tag (gtag.js) - Google Analytics