zoukankan      html  css  js  c++  java
  • python(三)@staticmethod和@classmethod使用和区别

    转载自[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()  
    #输出
    #static_foo
    #1
    
    A.class_foo()  
    #输出
    #class_foo
    #1
    #foo

    参考:

       [1] @staticmethod和@classmethod 作用和区别

          http://blog.csdn.net/qq_15037231/article/details/77943109

  • 相关阅读:
    POJ-2378 Tree Cutting
    ZOJ-3870 Team Formation
    POJ-1741 Tree (树上点分治)
    POJ-3107 Godfather
    HDU-3586 Information Disturbing(树形DP+删边)
    POJ 2796 (单调栈 + 前缀和)
    POJ 3250(单调栈)
    ATCoder 116 D (思维+贪心+栈)
    POJ2528 (离散化+线段树)
    HDU 2795(思维+线段树)
  • 原文地址:https://www.cnblogs.com/Jomini/p/8569211.html
Copyright © 2011-2022 走看看