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
  • 相关阅读:
    115. 不同的子序列
    114. 二叉树展开为链表
    基于Docker结合Canal实现MySQL实时增量数据传输
    Docker-Compose
    Docker容器的创建、启动、和停止
    ES集群
    ES
    Docker配置JDK1.8镜像
    Docker及Docker-Compose的使用
    docker安装jdk
  • 原文地址:https://www.cnblogs.com/buxizhizhoum/p/7097563.html
Copyright © 2011-2022 走看看