您的位置:首页 > 编程语言 > Python开发

python的staticmethod、classmethod

2015-09-02 10:54 471 查看
1、在Python 2.4及之后,静态成员方法和类方法用装饰器(decorators)实现
装饰器使用@操作符,例子如下:
class MyClass:

    val1 = 'Value 1'

    def __init__(self):

        self.val2 = 'Value 2'

    @staticmethod

    def staticmd():

        print '静态方法,无法访问val1和val2'

    @classmethod

    def classmd(cls):

        print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'

Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的:
1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;
2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;
3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。

4)要在类中使用静态方法,需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数。使用静态方法的好处是,不需要定义实例即可使用这个方法。另外,多个实例共享此静态方法。

一个类方法就可以通过类或它的实例来调用的方法, 不管你是用类来调用这个方法还是类实例调用这个方法,该方法的第一个参数总是定义该方法的类对象。 

记住:方法的第一个参数都是类对象而不是实例对象. 

按照惯例,类方法的第一个形参被命名为 cls. 任何时候定义类方法都不是必须的(类方法能实现的功能都可以通过定义一个普通函数来实现,只要这个函数接受一个类对象做为参数就可以了). 综上:

类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用
类方法的隐含调用参数是类,而类实例方法的隐含调用参数是类的实例,静态方法没有隐含调用参数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python