Python 如何正确使用静态方法和类方法?

230 篇文章 7 订阅
229 篇文章 4 订阅

image

最近有同学在后台问,什么情况下使用静态方法,什么情况下使用类方法

今天我们就来捋一下这两个方法的应用场景

首先,我们来定义一个普通的类,里面都是普通的方法,普通方法又叫实例方法

这个类运行起来的效果如下图所示:

image

大家注意在这个类里面的方法,它接受两个参数,并将他们转换为类型,然后相加并返回结果。这个过程非常简单,但是,它跟People这个类有什么直接关系吗?

其实这个方法跟这个类没有什么直接关系,我们甚至把它改成函数都可以:

运行结果跟之前完全一样:

image

我们可以说,函数就是一个。工具函数接收参数,输出结果,完全不关心谁在调用他,也不关心在哪里调用他。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以价位(同音):762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

但现在有一个比较尴尬的事情,这个函数,只有 在调用,其它地方都没有调用。单独把它放到其它地方又显得多余,弄成实例方法又浪费了self参数,这个时候,我们就可以用静态方法:

一句话总结:静态方法就是某个类专用的工具函数。

说完了静态方法,我们再说说类方法。什么情况下应该使用类方法呢?回答这个问题前,我先反问你一个问题,怎么把类初始化成一个实例?

你说这还不简单吗,一行代码就行了啊:

注意,这里你在初始化这个类的时候,你是一个一个参数传入进去的。如果你用过顺丰寄送快递,你就会发现,填写收件人的时候,有两种方式,一种方式就像上面这样,一个一个参数填进去。另一种方式,它给你一个输入框,你把一段包含姓名,地址,手机号的文字粘贴进去,它自动解析。

那么,如果我现在给你一个字符串:。你怎么基于这个字符串生成People类的实例?

这个时候,你可能会这样写:

这样做确实可以,但我能不能让People这个类自动识别呢?其实是可以的,有两种方法,一种方法是在里面多加几个参数,然后在初始化的时候,从这几个参数里面解析,这个方法大家都知道,我就不多讲了。我们来讲讲第二个方法,就是使用类方法。

我们只需要再定义一个类方法:

运行效果如下图所示:

image

类方法使用装饰器来装饰,并且它的第一个参数是隐式参数。这个参数其实就是这个类本身。这个隐式参数在我们调用类方法的时候,是不需要传入的。在这个类方法里面,相当于使用初始化了一个实例,然后把这个实例返回了出去。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以价位(同音):762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

这样做有什么好处呢?好处就在于我们完全不需要修改,那么,也就不需要修改代码里面其它调用了类的地方。例如现在我又想增加从英文句子里面提取名字和年龄的功能,那么只需要再添加一个类方法就可以了:

运行效果如下图所示:

image

一句话总结:当你想使用工厂模式,根据不同的参数生成同一个类的不同对象的时候,就可以使用类方法。

其实如果大家使用过Python自带的模块,你就会发现类方法无处不在:

这段代码里面的、和 ,都是类方法。他们最终返回的都是对象,区别在于他们是根据不同类型的输入参数生成的。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值