本文相关描述主要是个人的认知和见解,如有不当之处,还望各位大佬指正。
个人其他博客地址:
简书:https://www.jianshu.com/u/d6960089b087
掘金:https://juejin.cn/user/2963939079225608
小钟同学 | 文 【原创】| QQ:308711822
上一篇的关于面向对象编程初识篇里有讲到类中的类方法和静态方法。但是都可以使用类来调用的,那有什么不同的呐?
静态方法:
静态方法由类来调用,没有默认参数。在方法定义加上@staticmethod的装饰器,且去除self,就成为静态方法。
静态方法属于类,和实例无关。
类似类变量,建议只使用类名.静态方法的调用方式,虽然也可以使用实例名.静态方法方式调用)
静态方法是类中的函数,不需要实例。类本身就可以调用。
类方法:
类方法和静态方法一样由类调用,但是是采用@classmethod装饰,且需至少传入一个cls(代指类本身,类似self)参数。执类方法行时自动将调用该方法的类赋值给cls。
类似类变量,建议只使用类名.类方法的调用方式,虽然也可以使用实例名.类方法方式调用)
类方法是将类本身作为对象进行操作的方法。类本身就可以调用。
实例方法:
实例对象可以调用的函数,函数。通过self来传递实例的属性和方法(不过也可以传类的属性和方法)
需要类的实例的对象来调用
从上面的描述可以得知两个方法的共性是:
他们的区别就是装饰方法不同:
# -*- coding:utf-8 -*-
class Ape():
pass
live = '生命值1111111'
def __init__(self, name):
# 定义局部变量name属性
self.name = name # 此猿猴的名字
def eat(self):
print("实例方法-调用实例变量", self.name)
print("实例方法-调用类变量", self.live)
@classmethod
def eat_classmethod(cls):
print("类方法====>可以调用类变量", cls.live)
@staticmethod
def eat_staticmethod():
print("静态方法,无法调用我们的类变量(因为没有相关的引用)",live)
Ape.eat_classmethod()
Ape.eat_staticmethod()
从代码上看,我们的类方法,依赖于我们的cls的对象,而eat_staticmethod中调用live会报错:
如此说来,其实我们的可以简单区别开他们的使用的场景:
以上是个人对Python的实例方法,类方法和静态方法之间的区别和作用的简要阐述。
纯属个人实践中相关经验阐述总结,如有纰漏,还希望大佬们多多提点!小钟同学 | 文 【原创】| QQ:308711822
原文作者:程序员小钟同学;如有侵权,请联系管理员删除。