先在类中怎么来定义它们,和程序中怎样去使用:
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有点乱七八糟的,类不像类,实例不像实例,静态不像静态,然而又对空格极其敏感。我选择了它作为我的脚本语言,是不是错了?我开始怀疑。希望随着学习的深入,能改变我的这些想法。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.