zoukankan      html  css  js  c++  java
  • @classmethod及@staticmethod方法浅析【python】

    目前对于python中@classmethod 类方法和@staticmethod静态方法的有了一定的认识,之后有进一步的认识后继续记录。

    @classmethod :是和一个class类相关的方法,可以通过类货类实例进行调用,并将该class对象(不是class的实例对象)隐式地当作第一个参数传入。

    @staticmethod

    :基本上和一个全局函数差不多,可以通过类或者类的实例对象进行调用,不会隐式地传入任何参数。

    区别

    :类方法需要额外的类变量cls,调用类方法传入的类变量cls是子类,而不是父类。类方法和静态方法都可以通过类对象和类的实例对象访问。

    示例如下:

     1 class Myclass(object):
     2 
     3     var = "test for myclass"
     4 
     5     @classmethod
     6     def clsmethod(cls):
     7         print cls.var
     8 
     9     @staticmethod
    10     def sticmethod():
    11         print MyClass.var

      虽然两者输出结果相同但是类方法已经隐式地传入了当前的类作为参数,可以直接调用类方法直接输出,而静态方法则需绑定。

      另外一个显然的对比例子如下:

     1 class ParentClass(object):
     2     
     3     var = "test for parent"
     4 
     5     @classmethod
     6     def clsmethod(cls):
     7         print cls.var
     8 
     9 class SubClass(ParentClass):
    10     
    11     var = "test for sub"

      此时ParentClass.clsmethod输出为 “test for parent”,而Subclass.clsmethod输出为“test for sub”,通过此比较很好的诠释了@classmethod类方法隐式传入的第一个参数是当前类,而不是父类。同时类方法操作的是class 类对象提供的内部信息。而staticmethod可以作为一般的工具函数来使用。

  • 相关阅读:
    jQuery——通过Ajax发送数据
    Python爬虫入门教程 71-100 续上篇,python爬虫爬取B站视频
    实战演练:PostgreSQL在线扩容
    直播丨Oracle比特币勒索&数据库大咖讲坛
    使用seaborn绘制强化学习中的图片
    nginx stream模块
    工具用的好下班走的早
    10年大数据平台经验,总结出这份数据建设干货(内含多张架构图)
    nginx 配置4层转发
    详解pytorch中的max方法
  • 原文地址:https://www.cnblogs.com/kirago/p/4687889.html
Copyright © 2011-2022 走看看