python静态方法与类方法
1. 写法上的差异
类的方法可以分为:
静态方法:有 staticmethod 装饰的函数
类方法:有 classmethod 装饰的函数
实例方法:没有任何装饰器的普通函数
举个例子,如下这段代码中,run 普通的实例方法,eat 是静态方法,jump 是类方法。
class Animal:
def __init__(self, name):
self.name = name
def run(self):
print(f"{self.name}跑起来啦")
@staticmethod
def eat():
print("正在吃饭...")
@classmethod
def jump(cls, name):
print(f"{name}跳起来啦")
这三种方法,在写法有很大的区别:
1、普通的实例方法,在定义时,他的第一个方法固定是 self,如果是从实例调用,那么 self 参数 不需要传入,如果是通过类调用,那么 self 要传入已经实例化的对象。
>>> dog=Animal(name="小黑")
>>> dog.run()
小黑跑起来啦
>>> Animal.run(dog)
小黑跑起来啦
2、静态方法,在定义时,不需要 self 参数。
>>> dog=Animal(name="小黑")
>>> dog.eat()
正在吃饭...
>>> Animal.eat()
正在吃饭...
3、类方法,在定义时,第一个参数固定是 cls,为 class 的简写,代表类本身。不管是通过实例还是类调用类方法,都不需要传入 cls 的参数。
>>> dog=Animal(name="小黑")
>>> dog.jump("小黑")
小黑跳起来啦
>>> Animal.jump("小黑")
小黑跳起来啦
2. 方法与函数区别
在前面,我们很经常提到方法和函数,为免有同学将他们混为一谈,我这里总结一下他们的区别。
在 Python 3.x 中,
普通函数(未定位在类里)和静态方法,都是函数(function )。
实例方法(@staticmethod)和类方法,都是方法(method )。
这些结论其实都可以使用 type 函数得到验证。
先准备如下代码
class Animal:
def __init__(self, name):
self.name = name
def run(self):
print(f"{self.name}跑起来啦")
@staticmethod
def eat():
print("正在吃饭...")
@classmethod
def jump(cls, name):
print(f"{name}跳起来啦")
def demo_func():
pass
然后进入 Python Console 模式
>>> type(demo_func) # 普通函数
>>> type(dog.eat) # 静态方法
>>>
>>> type(dog.run) # 实例方法
>>> type(dog.jump) # 类方法
方法是一种和对象(实例或者类)绑定后的特殊函数。
方法本质上还是函数,不同之处在于它与对象进行绑定。
审核编辑:符乾江
-
面向对象
+关注
关注
0文章
64浏览量
10220 -
python
+关注
关注
57文章
4858浏览量
89592
发布评论请先 登录
单片机系统硬件的调试方法
求助,静态电流测试,稳态测试怎么做
Python调用API教程
开关电源测试流程方法合集
谐波源定位常用的方法有哪些?
动态调整同步周期的具体方法是什么?
边聊安全 | 软件单元测试的设计方法
在Python中字符串逆序有几种方式,代码是什么
详解ADC电路的静态仿真和动态仿真
数字IC设计:方法、技巧与实践
参考cycx3_uvc_ov5640例程,想进行按键触发拍照,使用方法一,请问怎么实现的?
python入门圣经-高清电子书(建议下载)
伺服故障代码有哪些?哪些处理方法?

python静态方法与类方法
评论