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