• staticmethod classmethod修饰符


    一、staticmethod(function) 

    Return a static method for function.
    A static method does not receive an implicit first argument. To declare a static method, use this idiom:

    class Sing():
        @staticmethod
        def sayHello():
            print "hello world"
    
        def sayNo():
            print "no"
    
    if __name__ == '__main__':
        Sing.sayHello()
        Sing.sayNo()

    Sing.sayNo报错如下:

    TypeError: unbound method sayNo() must be called with Sing instance as first argument (got nothing instead)
    sayNo()方法非静态方法,需要先将对象Sing实例化才能调用该方法
    而sayHello()方法不报错,因为staticmethod修饰
    下面方法才是对的:

    class Sing():
        @staticmethod
        def sayHello():
            print "hello world"
    
        def sayNo(self):
            print "no"
    
    if __name__ == '__main__':
        Sing.sayHello()
        sing = Sing()
        sing.sayNo()

    二、classmethod(function) 

    Return a class method for function.
    A class method receives the class as implicit first argument, just like an instance method receives the instance. To declare a class method, use this idiom:

    class Sing():
        @classmethod
        def sayHello(self):
            print "hello world"
    
        def sayNo(self):
            print "no"
    
    if __name__ == '__main__':
        Sing.sayHello()
        sing = Sing()
        sing.sayNo()
        

    注意:staticmethod修饰的方法不需要接self参数,而classmethod修饰的方法则需要接self参数;

    三、@property修饰符(新式类特有,新式类即接object定义的类)
    修饰为类的属性,如下为不加@property修饰符的类的定义:

    class C(object):
        def __init__(self):
            self._x = None
    
        def getx(self):
            return self._x
        def setx(self, value):
            self._x = value
        def delx(self):
            del self._x
        x = property(getx, setx, delx, "I'm the 'x' property.")

    通过@property修饰符修饰的类的定义:(从Python2.6开始引入setter,deleter,getter属性)

    class C(object):
        def __init__(self): self._x = None
    
        @property
        def x(self):
            """I'm the 'x' property."""
            return self._x
    
        @x.setter
        def x(self, value):
            self._x = value
    
        @x.deleter
        def x(self):
            del self._x
  • 相关阅读:
    LRU算法简介
    linux下安装nginx+php+mysql环境 详细教程
    CentOS 6.6编译安装Nginx1.6.2+MySQL5.6.21+PHP5.6.3
    unicode 格式 转汉字
    js 操作cookie
    哈希函数
    php商城秒杀活动
    php 栈、 出栈、入栈
    php单例模式
    封装PHP增删改查方法
  • 原文地址:https://www.cnblogs.com/forilen/p/4465439.html
Copyright © 2020-2023  润新知