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

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

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

而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。

这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

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

从它们的使用上来看,
  • @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
  • @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。

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

下面上代码。

  1. class A(object):  
  2.     bar = 1  
  3.     def foo(self):  
  4.         print('foo')  
  5.  
  6.     @staticmethod  
  7.     def static_foo():  
  8.         print('static_foo')  
  9.         print(A.bar)
  10.  
  11.     @classmethod  
  12.     def class_foo(cls):  
  13.         print('class_foo')  
  14.         print(cls.bar)  
  15.         cls().foo()  
  16.   
  17. A.static_foo()  
  18. A.class_foo()  
输出
static_foo
1
class_foo
1
foo

转载于:https://www.cnblogs.com/aaronthon/p/9398120.html

你可能感兴趣的文章
Linux权限管理(笔记)
查看>>
(笔记)电路设计(二)之串联匹配电阻的应用
查看>>
Linux下的grep搜索命令详解(二)
查看>>
C 基本语法
查看>>
Codeforces Round #258 (Div. 2) A. Game With Sticks 水题
查看>>
Server 2008 R2 事件查看器实现日志分析
查看>>
解决Cookie乱码问题
查看>>
javascript中的链表结构—从链表中删除元素
查看>>
用实例揭示notify()和notifyAll()的本质区别
查看>>
Android MediaPlayer接口及状态迁移
查看>>
JQuery------prevAll(),nextAll(),attr()方法的使用
查看>>
Disciz!NT开源资源汇总
查看>>
Python网络编程笔记
查看>>
Vim自动补全神器–YouCompleteMe
查看>>
Mysql 小工具
查看>>
个人andriod实习小作品,个人联网笔记本
查看>>
Codeforces Round #313 (Div. 2) 解题报告
查看>>
go7---map
查看>>
CentOS5.4安装redmine详细步骤
查看>>
runloop的source
查看>>