关于类中的方法问题

关于类中的方法问题

在一个类中,我们假如定义一方法run : 如果分三种不同方式来定义
1. def run (self)
2. @classmethod
def run(cls)
3. @staticmethod
def run(self)
这三种有什么区别,在用法有什么注意点。好像三种情况下,都不需要实例化类,都可以通过 类名. run 来调用
http://img1.sycdn.imooc.com//climg/5f23a769088b5f4609600540.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,第一种写法是需要实例化类的,不能直接用类名.run来调用:

http://img1.sycdn.imooc.com//climg/5f23b36009bf56a806360457.jpghttp://img1.sycdn.imooc.com//climg/5f23b39509b7ae7806770712.jpg

第二种写法是将方法定义为类方法,可以直接类名.方法名()使用。

第三种写法是将方法定义为静态函数,静态方法只是名义上归属类管理,但是不能使用类变量和实例变量,该函数不传入self或者cls,所以不能访问类属性和实例属性。

如果我的回答解决了您的疑惑,请采纳,祝学习愉快~~~~

  • 慕瓜5422012 提问者 #1
    追问。问题1:漏了一个点。如果定义的时候没有写self。可以通过类名. run来调用。这样就看起来和用了装饰器@classmethod没有什么区别
    2020-07-31 14:55:26
  • 好帮手慕乃馨 回复 提问者 慕瓜5422012 #2
    同学你好,这样的确可以运行,但是你会发现没有办法向这个函数传递参数,因为在类中封装的方法第一个参数必须是self,而使用装饰器@classmethod可以向函数传递一个类作为参数,从而调用类的属性,类的方法,实例化对象。
    2020-07-31 15:41:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师