`
Jeffrey4l
  • 浏览: 9435 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

classmethod & staticmethod in python

 
阅读更多

Python 的类定义中,如果想要定义类的静态方法的话,有两种方法,一是classmethod,另一种是staticmethod。其实这两种方法是不相同的。

class A(object):

    @staticmethod
    def foo(message):
        print message

    @classmethod
    def bar(cls, message):
        print "%s => %s" % (cls, message)
>>> A.foo
<function __main__.foo>
>>> A.foo("foo")
foo
>>> A.bar
<bound method type.bar of <class '__main__.A'>>
>>> A.bar("bar")
<class '__main__.A'> => bar

可以看出,staticmethod的声明方式只是将函数的调用限定到了类里。在调用foo方法时,不能得到其调用都是谁。而classmethod是真正意义上的类方法,这点可以和java的static方法类比。他在调用时,是可以得到调用者的信息。尤其是在继承中,参考下面的例子。

class A:
    @classmethod
    def foo(cls,msg):
        print "%s => %s " % (cls,msg)

class B(A):
    pass
>>> A.foo("Hello World")
__main__.A => hello world
>>> B.foo("Hello World")
__main__.B => hello world

所以,在日常使用中,一般classmethod使用的情况更多一些。不推荐staticmethod的使用,应该用function来代替。

0
5
分享到:
评论

相关推荐

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

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

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

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

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

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

    python的staticmethod与classmethod实现实例代码

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

    Python中staticmethod和classmethod的作用与区别

    在Python编程中,staticmethod(静态方法)和classmethod(类方法)是两种特殊类型的方法,它们用于定义与类相关的行为,但不需要访问实例属性。要理解staticmethod和classmethod的作用与区别,首先需要了解Python中...

    staticmethod和classmethod的区别

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

    python面试题

    - 更多关于这个问题的讨论:[What is the difference between staticmethod and classmethod in Python?]...

    Python 的描述符 descriptor详解

    问题,另外还引入了一些新的概念,比如 classmethod, staticmethod, super, Property 等。因此理解 descriptor 有助于更好地了解 Python 的运行机制。 那么什么是 descriptor 呢? 简而言之:descriptor 就是一类...

    Python 静态方法和类方法实例分析

    在Python面向对象编程中,类方法和静态方法是两种特殊的方法,它们在使用上有各自的特点,同时也有别于实例方法。要了解类方法和静态方法,首先需要理解类属性和实例属性的概念。 类属性是属于类本身的属性,它被这...

    python面试常用的常用38题

    Python中的类可以使用装饰器@classmethod和@staticmethod来定义类方法和静态方法。classmethod可以访问类的所有实例,而staticmethod不能访问类的实例。 3. 删除列表中的重复元素 可以使用set方法或fromkeys方法来...

    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函数文档_python函数_python文档_python_

    例如,`@staticmethod` 和 `@classmethod` 装饰器改变类方法的调用方式,`@property` 用于创建属性访问器。 Python 标准库还包含了异常处理机制,使用 `try/except` 语句捕获和处理错误。例如: ```python try: ...

    stat_python_

    Python提供了`classmethod`和`staticmethod`装饰器来处理类方法。静态方法(`staticmethod`)不接收`self`参数,可以直接调用类名或实例来调用。然而,它们并不是真正的静态变量,因为它们无法直接访问类变量。如果...

    Python-技术面试需要掌握的基础知识整理

    4. **面向对象编程**:理解类(class)与对象(object)的概念,能够编写构造函数(__init__)、方法(classmethod、staticmethod)、继承(inheritance)、多态(polymorphism)以及封装(encapsulation)。...

    python-3.9.5-macos.zip

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

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

    python练⼿经典100例-推荐⼏个适合新⼿练⼿的Python项⽬ 《python⼊门例⼦》 python 为什么实例对象可以调⽤类⽅法? 实例是什么例是类定义的实。那么,类中所定义的属⽅只要没有被屏蔽,在它的实体中就同样是可访问...

    Python基础——笔试面试利器

    ### Python基础——笔试面试利器 #### 一、Python的函数参数传递 在Python中,所有变量都被视为内存中对象的“引用...更多信息可以查阅:[What is the difference between staticmethod and classmethod in Python]...

    python3.5.2官方中文文档

    4. **元编程**:使用Python代码动态创建或修改其他Python对象,如type、classmethod、staticmethod等。 五、异步编程 1. **asyncio**:Python的异步I/O框架,支持事件循环、协程、任务和未来对象,实现非阻塞I/O。...

    超全面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