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++要快上许多啊,呵呵,不知道这个项目能不能改。

This entry was posted in Happy coding and tagged , . Bookmark the permalink.

One Response to python中的静态成员函数

  1. EmiNarcissus says:

    This passage helps a lot~~writting a little widget using python and just got troubled with this point>_<

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>