zoukankan      html  css  js  c++  java
  • python classmethod 和 staticmethod的区别

    https://stackoverflow.com/questions/12179271/meaning-of-classmethod-and-staticmethod-for-beginner

    1.classmethod还可以调用内部的classmethod和staticmethod(是的可以调用staticmethod,cls.staticmethod)。

    2.staticmethod不能调用内部的任何方法。

    3.classmethod第一个参数cls表示这个类,staticmethod不需要这个参数,staticmethod只是一个函数,不能调用类内部的其它方法(可以被调用)。

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    
    class DateProcessor(object):
        def __init__(self):
            pass
    
        def parse_date(self, date_str):
            print date_str
            self.print_date(date_str)  # 调用了calssmethod
            self.print_date_1(date_str)  # 调用了staticmethod
    
        @classmethod
        def print_date(cls, date_str):
            cls.print_date_2(date_str)  # classmethod可以调用类里面其它classmethod
            cls.print_date_1(date_str)  # 也可以调用staticmethod
            print date_str
    
        @classmethod
        def print_date_2(cls, date_str):
            # 可以被其它方法调用
            print "date_str_2:", date_str  
    
        @staticmethod
        def print_date_1(date_str):
            # 可以被其它方法调用,但是不能调用其它方法
            print "date_str_1:", date_str
    
    
    if __name__ == "__main__":
        date_process = DateProcessor()
        date_process.parse_date("2017-06-29")  # 实例化
    
        DateProcessor.print_date("2017-06-30")  # 不用实例化类,调用classmethod
        DateProcessor.print_date_1("2017-06-30")  # 不用实例化类,调用staticmethod
  • 相关阅读:
    day15---作业
    day14---函数的参数
    day14作业
    day--13函数的基本使用
    day13--函数练习(作业)
    day12--文件处理
    day12--作业
    Python函数对象、函数嵌套和闭包函数
    每日作业以及周末作业
    Python名称空间与作用域
  • 原文地址:https://www.cnblogs.com/buxizhizhoum/p/7097563.html
Copyright © 2011-2022 走看看