为什么需要静态方法?
来源:互联网 发布:趴桌子睡觉神器知乎 编辑:程序博客网 时间:2024/05/19 02:03
首先,定义一个Pizza类:
我们可以得到:
#cook是一个方法。
>>> Pizza.cook
<function Pizza.cook at 0x029A10C0>
#要调用cook方法必须实例化Pizza类。
>>> Pizza.cook()
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
Pizza.cook()
TypeError: cook() missing 1 required positional argument: 'self'
>>> Pizza().cook()
0
#不同的实例化不相同
>>> Pizza() is Pizza()
False
#cook方法依赖于类的实例
>>> Pizza().cook is Pizza().cook
False
>>>
然后,定义一个静态方法:
我们可以得到:
#静态方法也是方法的一种
>>> Pizza.cook
<function Pizza.cook at 0x02B310C0>
#调用静态方法cook不需要实例化Pizza类。
>>> Pizza.cook()
0
#不同的实例化不相同
>>> Pizza() is Pizza()
False
#不同实例的cook方法相同,实例与类的cook方法相同 ——> 静态方法cook不需要依赖于类的实例。
#静态方法即可以被类调用,同样类的实例也可以调用,只是这样会耗用更多的资源而已(不专业)。
>>> Pizza().cook is Pizza().cook
True
>>> Pizza().cook is Pizza.cook
True
>>>
复制代码
可得结论:
类的方法在使用时,必须实例化类;而静态方法不需要依赖于类的实例化。Python 可以直接使用静态方法,而避免了去实例化一个对象。实例化对象需要消耗资源的,静态方法避免了这一切。
class Pizza(object): def cook(self): return 0
我们可以得到:
#cook是一个方法。
>>> Pizza.cook
<function Pizza.cook at 0x029A10C0>
#要调用cook方法必须实例化Pizza类。
>>> Pizza.cook()
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
Pizza.cook()
TypeError: cook() missing 1 required positional argument: 'self'
>>> Pizza().cook()
0
#不同的实例化不相同
>>> Pizza() is Pizza()
False
#cook方法依赖于类的实例
>>> Pizza().cook is Pizza().cook
False
>>>
然后,定义一个静态方法:
class Pizza(object): @staticmethod def cook():#不需要传入参数 return 0;
我们可以得到:
#静态方法也是方法的一种
>>> Pizza.cook
<function Pizza.cook at 0x02B310C0>
#调用静态方法cook不需要实例化Pizza类。
>>> Pizza.cook()
0
#不同的实例化不相同
>>> Pizza() is Pizza()
False
#不同实例的cook方法相同,实例与类的cook方法相同 ——> 静态方法cook不需要依赖于类的实例。
#静态方法即可以被类调用,同样类的实例也可以调用,只是这样会耗用更多的资源而已(不专业)。
>>> Pizza().cook is Pizza().cook
True
>>> Pizza().cook is Pizza.cook
True
>>>
复制代码
可得结论:
类的方法在使用时,必须实例化类;而静态方法不需要依赖于类的实例化。Python 可以直接使用静态方法,而避免了去实例化一个对象。实例化对象需要消耗资源的,静态方法避免了这一切。
阅读全文
0 0
- 为什么需要静态方法?
- .net 为什么需要静态类?
- 为什么C++需要静态成员
- 为什么使用静态方法
- 为什么静态变量只需要初始化一次
- 为什么不要重写静态方法
- 静态方法为什么只能使用静态变量
- 为什么构造方法不是静态方法
- Java静态方法为什么不能访问非静态方法
- Java静态方法为什么不能访问非静态方法
- Java静态方法为什么不能访问非静态方法
- Java中为什么静态方法不能访问非静态方法
- Java静态方法为什么不能访问非静态方法
- Java静态方法为什么不能访问非静态方法
- 为什么需要集合?集合的常用方法
- java中方法为什么需要返回值?
- java中方法为什么需要返回值?
- 重写equal()为什么需要重写hashCode方法
- 浅谈数据结构-二叉树
- java调用weka,读取csv及arff文件,将csv转化为arff文件
- Java的问题
- 代码结构中Dao,Service,Controller,Util,Model是什么意思
- Win10安装 JDK 及配置环境变量的方法
- 为什么需要静态方法?
- NOIP普及组题解(能有民间数据的三题)
- java内存泄露分析方案
- 数据集总结(未完)
- 二叉树遍历
- Flipping Burned Pancakes --模拟
- 动态栈的创建
- 非Python的Web服务器之Apache WSGI模块安装
- Maven异常:Could not find artifact