四时宝库

程序员的知识宝库

自动化利器Python类实例方法、静态方法和类方法的区别和用法

带你走进 @ 机器人时代

Discover 点击上面蓝色文字关注我们


Python类
中对类的方法分为:静态方法、类方法和实例方法三种,采用 @classmethod 修饰的方法为类方法;采用 @staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法。

下面这段代码是实例方法:

class qt:
    def __init__(self):
        e=9
    def saw(self):
        print('这是一个实例方法')
s=qt()
s.saw() #类直接调用实例方法
qt.saw(s) #类名调用实例的方法,需要传值
运行结果:
这是一个实例方法
这是一个实例方法


采用@classmethod修饰的方法为类方法,看下面的代码:

#类方法
class qt:
    def __init__(self):
        e=9
    @classmethod  #类方法
    def saw(cls): #约定俗成变量命名方式
        print('这是一个类方法',cls)
qt.saw()
显示结果:
这是一个类方法 <class '__main__.qt'>


采用@staticmethod来修饰的方法为静态方法,其实就是一个定义在类名空间里面的函数,我们来测试一下:

#静态方法
class qt:
    def __init__(self):
        self.e=9
    @staticmethod  #静态方法
    def saw(): #约定俗成变量命名方式
        print('这是一个静态的方法')
qt.saw()
print(qt.e)

运行结果:
这是一个静态的方法
Traceback (most recent call last):
  File "E:\Python程序\类的演示.py", line 81, in <module>
    print(qt.e)
AttributeError: type object 'qt' has no attribute 'e'

使用静态方法的时候,其实相当于一个函数了,self.e这个变量就不存在了,因此调用就会出错。

实际工作中,实例的方法比较常见,但如果用下面的方法调用,则会出错:

class tru_op:
    def yt(self):
        print('我是李老师')
tru_op.yt()
运行结果:
Traceback (most recent call last):
  File "E:\Python程序\类的演示.py", line 87, in <module>
    tru_op.yt()
TypeError: tru_op.yt() missing 1 required positional argument: 'self'


为什么会这样?最后一行信息提示缺少self参数传值,直接调用的时候没有给self传值,那么修改代码如下:

tu=tru_op()
tru_op.yt(tu)#通过手动给类对象yt传值
运行结果:
我是李老师


或者我们可以用tru_op.yt(None)这样的方式,哪怕传一个空值(如果函数不需要传值的情况下),得到的运行结果都是正常的,如果函数需要传值,那就必须传值。

Python 中允许使用类名直接调用实例方法,但必须手动为该方法的第一个 self 参数传递参数,这种调用方法的方式被称为“非绑定方法”。

用类的实例对象访问类成员的方式称为绑定方法,而用类名调用类成员的方式称为非绑定方法。

坚持学习,这样每天都能进步一点点!!

往期回顾:

  • 来来来,送你一个金牌销售机器人,7X24小时不休,不要工资免费用!
  • RPA技术在旅行社销售业务中如何凤凰涅槃??
  • 【工资翻三倍】系列:一招搞定九宫图片切割机器人,让你的朋友圈更加炫酷!


本文引用和摘录相关内容,请联系侵删。

- END -


最后,文章有帮助到你的话点赞在看
励我们分享更多的干货!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接