博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
@staticmethod和@classmethod
阅读量:6481 次
发布时间:2019-06-23

本文共 791 字,大约阅读时间需要 2 分钟。

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。 

而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。 
这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢 

从它们的使用上来看:

    • @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
    • @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
    • 如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。 

      而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。 

      class A(object):      bar = 1      def foo(self):          print 'foo'      @staticmethod      def static_foo():          print 'static_foo'          print A.bar      @classmethod      def class_foo(cls):          print 'class_foo'          print cls.bar          cls().foo()  ###执行  A.static_foo()  A.class_foo()
      1 static_foo2 13 class_foo4 15 foo

       

转载于:https://www.cnblogs.com/omak/p/10643901.html

你可能感兴趣的文章
C#中禁止程序多开
查看>>
分布式缓存Redis使用以及原理
查看>>
Activity竟然有两个onCreate方法,可别用错了
查看>>
Linux经常使用命令(十六) - whereis
查看>>
Linux五种IO模型
查看>>
Bootstrap技术: 模式对话框的使用
查看>>
小知识,用myeclipes找jar
查看>>
in-list expansion
查看>>
设计原则(四):接口隔离原则
查看>>
基于react的滑动图片验证码组件
查看>>
【学习笔记】阿里云Centos7.4下配置Nginx
查看>>
VuePress手把手一小時快速踩坑
查看>>
学习constructor和instanceof的区别
查看>>
Vijos P1881 闪烁的星星
查看>>
ABP理论学习之领域服务
查看>>
Qt 控制watchdog app hacking
查看>>
让所有IE支持HTML5的解决方案
查看>>
RDD之五:Key-Value型Transformation算子
查看>>
percona 5.7.11root初始密码设置
查看>>
Cognitive Security的异常检测技术
查看>>