zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    常用内建函数
    函数作用域
    异常处理语句
    迭代器---待延申扩展
    流程控制语句
    字典
    集合
    数据类型的可变与不可变
    Openstack keystone组件详解
    云计算openstack介绍(001)
  • 原文地址:https://www.cnblogs.com/forilen/p/4465439.html
Copyright © 2011-2022 走看看