class A:
def f1():
pass
def f2(self):
pass
@classmethod
def f3(cls):
pass
@staticmethod
def f4():
pass print(type(A.f1), type(A.f2), type(A.f3), type(A.f4))
<class 'function'> <class 'function'> <class 'method'> <class 'function'>
可以看出,使用类A去调用时,f1/f2/f4是函数,f3是方法。

a = A()
print(type(a.f1), type(a.f2), type(a.f3), type(a.f4))
使用对象a去调用时,f1/f2/f3是方法,f4是函数
<class 'method'> <class 'method'> <class 'method'> <class 'function'>
 
f1:只能被类调用,不能被对象调用,因为f1没有self参数。被类调用时,就是普通的静态函数,和f4相同。
f2: 能够被类调用,也能被对象调用。但是这两者调用是有区别。当类调用时,和f1/f4相同,和普通的静态函数一样;当对象调用时,传入的第一个参数是对象,self=A。
f3: 能够被类调用,也能被对象调用。但是这两者调用有区别,被类调用时,可以访问类本身的状态。可以被对象访问,但是最好不要用这种方式,如果需要,请使用静态方法。
f4: 能够被类调用,也能够被对象调用。和普通函数一样。与f1不同的一点是,f1没有修饰,当对象调用时,默认会传入self参数,导致出错。但是对象调用f4时,和普通的静态函数完全一样。
 
 
 
 

最新文章

  1. MongoDB和Redis-NoSQL数据库-文档型-内存型
  2. 前台 JSON对象转换成字符串 相互转换 的几种方式
  3. chrome修改UserAgent,调试
  4. SQL数据库基础(九)
  5. Codeforces Gym 100531J Joy of Flight 变换坐标系
  6. [iOS 多线程 &amp; 网络 - 2.7] - NSURLCache
  7. 忘记root口令的处理方法
  8. android 中在CMD中查看sqlite
  9. (转) 将VB.NET网站转换成C#的全过程
  10. 网易云课堂_C++程序设计入门(上)_第3单元:更上一层楼 – 超越C的语法_第3单元作业【3】-在线编程(难度:中;10分)
  11. Base64技术:把对象转变成字符串
  12. .net网站报错:对象的当前状态使该操作无效
  13. higncharts 去掉Highcharts.com链接
  14. javascript中原型链与instanceof 原理
  15. ButterKnife的使用以及不能自动生成代码问题的解决
  16. MSSQL 2000 错误823恢复案例
  17. mysql中的函数与存储过程
  18. 【Spark篇】---Spark中yarn模式两种提交任务方式
  19. vue-11-路由嵌套-参数传递-路由高亮
  20. linux中使用ifconfig命令查看网卡信息时显示为eth1,但是在network-scripts中只有ifcfg-eth0的配置文件,并且里面的NAME=&quot;eth0&quot;。

热门文章

  1. LeetCode-442 数组中重复的数据
  2. (五) Mysql 之锁详细篇
  3. 如何设置VBA代码的密码?如何取消VBA代码的密码?
  4. JavaScript验证API
  5. CF1738E Balance Addicts
  6. Redis系列目录
  7. 在使用IDEA提交git代码时,如何修改提交者的名字
  8. phpstudy 配置域名解决index.php 过多重定向
  9. vscode plugin - jenkins jack使用方法
  10. 对SQL CTE的一点个人理解