• Python Static Method


    How to define a static method in Python?
    Demo:

    #!/usr/bin/python2.7
    #coding:utf-8
    # FileName: test.py
    # Author: lxw
    # Date: 2015-07-03
    
    #Inside a class, we can define attributes and methods
    class Robot:
        '''Robot class.
    
        Attributes and Methods'''
        population = 0
        def __init__(self, name):
            self.name = name
            Robot.population += 1
            print('(Initialize {0})'.format(self.name))
    
        def __del__(self):
            Robot.population -= 1
            if Robot.population == 0:
                print('{0} was the last one.'.format(self.name))
            else:
                print('There are still {0:d} robots working.'.format(Robot.population))
    
        def sayHi(self):
            print('Greetings, my master call me {0}.'.format(self.name))
    
        '''
        #The following class method is OK.
        @classmethod
        def howMany(cls):   #cls is essential.
            print('We have {0:d} robots.'.format(cls.population))
        '''
    
        '''
        #The following static method is OK.
        @staticmethod
        def howMany():
            print('We have {0:d} robots.'.format(Robot.population))
        '''
    
        #The following class method is OK.
        def howMany(cls):   #cls is essential.
            print('We have {0:d} robots.'.format(cls.population))
        howMany = classmethod(howMany)
    
        '''
        #The following static method is OK.
        def howMany():
            print('We have {0:d} robots.'.format(Robot.population))
        howMany = staticmethod(howMany)
        '''
        
    
    def main():
        robot1 = Robot("lxw1")
        robot1.sayHi()
        #staticmethod/classmethod 都既可以使用类名访问,也可以使用对象名访问, 但classmethod在定义时需要cls参数
        Robot.howMany()
        robot1.howMany()
        
        robot2 = Robot("lxw2")
        robot2.sayHi()
        Robot.howMany()
        robot2.howMany()
    
    if __name__ == '__main__':
        main()
    else:
        print("Being imported as a module.")

    Differences between staticmethod and classmethod:

    classmethod:

    Its definition is mutable via inheritance, Its definition follows subclass, not parent class, via inheritance, can be

    overridden by subclass. It is important when you want to write a factory method and by this custom attribute(s)

    can be attached in a class.

    staticmethod:

    Its definition is immutable via inheritance. 类似其他语言中的static方法。

  • 相关阅读:
    python_函数
    初始python第三天(三)
    python入门练习题2
    python开发进阶之路(一)
    python入门练习题1
    初识Python第三天(二)
    初识Python第三天(一)
    初识Python第二天(4)
    初识python第二天(3)
    c windows控制台输出颜色文字
  • 原文地址:https://www.cnblogs.com/lxw0109/p/python_static_method.html
Copyright © 2020-2023  润新知