蓝天,小湖,湖水中一方小筑

python中的静态成员函数

被C++郁闷了,编译一次老半天,于是又想到了Python。在试着把C++的东西转过来的时候,突然想要用到静态方法,正要在def前面加个static,突然想到 没有这么玩的啊,于是查自带的文档,居然被我找到了。

在Python2.4之后,系统中加入了函数修饰符这个东西,使用Java中的@符号来作为指示器,用来修饰函数。一个修饰符就是一个函数,它将被修饰的函数参数,并 返回修饰后的同名函数或者其它可调用的对象。修饰符必须出现在函数定义前一行,而不允许和函数定义在同一行。也就是说下面的两条语句中,第二条是非法的:

@A
def f():

@A def f():

修饰器可以自定义,只需要符合上面所说的规定,传入一个函数为参数,返回修饰后的同名函数或者其它可调用的对象。下面就是这样的一个例子。在命令行中运行就可以看到, 函数 f 有一个属性是attr,值是 decorated。

def deco(func):
   func.attr = 'decorated'
return func

@deco
def f(): pass
>>> f

>>> f.attr
'decorated'

下面开始说说静态成员函数,在C++中,静态成员函数就是可以不用新建实例即可以使用的成员函数,我也就是用到了它这个特性,于是在文档中看到了使用 @staticmethod 修饰符来修饰函数即可,成员函数中不需要写第一个默认参数 self(NND,一个方法加一个,累死老子了),其它和普通的方法相同。它可以被类直接调用,也可以使用实例来调用。
差不多就这样子,满有用的,也满好玩的,看来 Python 还有许多东西没用到啊,呵呵 。

btw: 折腾了N久的那段小程序,用 Python 基本上可以说是一个下午弄完了,除去设计的那些时间,Python 也比C++要快上许多啊,呵呵,不知道这个项目能不能改。