`
liujun11
  • 浏览: 21275 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

@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

分享到:
评论

相关推荐

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

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

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

    静态方法则是通过`@staticmethod`装饰器定义的,它们与类或实例无关,不接收`self`或`cls`参数。静态方法内部不能访问类属性或实例属性,它们更像是独立的辅助函数,但被标记为与特定类相关联。在`Dog`类中,`run`...

    python的staticmethod与classmethod实现实例代码

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

    staticmethod和classmethod的区别

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

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

    总的来说,理解`staticmethod`和`classmethod`的区别有助于编写更加清晰、可维护的Python代码,它们提供了灵活的方式来组织和扩展类的行为。在实际编程中,根据具体需求选择合适的方法修饰器是非常重要的。

    Python中staticmethod和classmethod的作用与区别

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

    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, ...

    Python单例模式实例详解

    在Python中,`@staticmethod`和`@classmethod`的区别在于,`@staticmethod`不需要类的上下文,而`@classmethod`需要。`@classmethod`通常用于子类重写或处理类相关的操作,而`@staticmethod`则更像是一般的函数,...

    超全面python面试题

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

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

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

    python面向对象day03.txt

    静态方法 @staticmethod 类名.静态方法名(传参) 对象.静态方法名(传参) 类内的 __slots__ 列表属性 class Student: __slots__ = ['name', 'score'] 类的文档字符串 类内的 __doc__属性绑定文档字符串 继承 ...

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

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

    Python程序基础:类方法和静态方法.pptx

    类方法是类所拥有的方法,需要用修饰器“@classmethod”来标识其为类方法。对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(同self一样只是一个习惯),能够通过对象名调用类方法,也可以通过类名...

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

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

    python-类方法的使用.docx

    静态方法用 `@staticmethod` 装饰器定义,不接收 `cls` 参数,它们直接与类的逻辑相关,而不涉及类的实例或状态。例如: ```python class MyClass: count = 0 @classmethod def increase_count(cls): cls....

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

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

    Python应用开发-类的方法.pptx

    在Python中,类方法要使用@classmethod来修饰,而且第一个参数一般命名为cls(也可以是别的名称)。类方法通常使用类的名称调用,例如:Person.show();类方法也可以使用实例调用,例如:p.show();类方法调用时会向...

    Python语言高频重点汇总

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

    Python_基础面试题.pdf

    Python中的内置装饰器包括@classmethod、@staticmethod和@property。@classmethod用于类方法,它接收类对象作为第一个参数;@staticmethod不接收类或实例作为参数,用于定义与类相关的功能;@property用于属性的获取...

    python面试题100.docx

    - `@staticmethod`用于标记那些与类或实例无关的方法,它们不接受`self`参数,可以直接通过类或实例调用,如`A.static_foo(x)`。 - `@classmethod`接收一个`cls`参数,代表类本身,常用于不需要实例化就能访问的类...

Global site tag (gtag.js) - Google Analytics