python的staticmethod和classmethod

 先在类中怎么来定义它们,和程序中怎样去使用:

class CA:
    "the class is designed to test a class is defined without being derived from base class object"
    x = 0L
    @classmethod
    def func( sef ):
        print( "CA func" )
                
    @staticmethod
    def staticfunc():
        print( "CA static function" )

CA.staticfunc()
a = CA()
a.func()
a.staticfunc()
CA.func()

在类的方法属性的最前面的加上

@classmethod

@staticmethod

来分别定义类的方法和类的静态的方法。

 

定义上

静态方法可以没有一个参数,但是类方法(用@classmethod定义的方法)则必须要有一个参数,这个参数在运行时由解释器传入,如果是以类加函数名的方式调用则传入的是类,如果是以实例加函数名的方式,则传入的是实例的引用。

 

 

使用上

2者都可以类加方法名来使用;也可以实例加方法名来使用。

 

但是我觉得大家可以不去使用@classmethod,我真不觉得它有什么用,并且有可能在以后的版本被删掉。看看这段话:

Ironically, there are now no known uses for class methods in the Python distribution…. I might even get rid of classmethod in a future release if no good use for it can be found!

这段话的是由python的成员van Rossum所说,van Rossum是python的类型和类的标准的起草者。起草的文档:

http://www.python.org/download/releases/2.2/descrintro/#metaclasses 

 

上面那段话意思就是说,目前为止没有发现什么class method的用处,如果将来还是没什么用处的话,可能就去除掉这个东西。

 

 

 

学到这里,发一句感言吧,python有点乱七八糟的,类不像类,实例不像实例,静态不像静态,然而又对空格极其敏感。我选择了它作为我的脚本语言,是不是错了?我开始怀疑。希望随着学习的深入,能改变我的这些想法。

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *