Python中3种类方法:普通类方法、@classmethod方法和@staticmethod方法

就三种方法之间的异同点简单讨论一下~

一、类的普通方法

class Test():
    def ordinary_method(self):
        print("This is ordinary-method")
        
if __name__=="__main__":
    Test().ordinary_method()

1、类的普通方法需要一个表示对象本身的变量self,以便在方法中获取自身变量。
2、类的普通方法只能通过对象调用,而不能通过类直接调用。

错误示例:
1、不传self

class Test():
    def ordinary_method():
        print("This is ordinary-method")
        
if __name__=="__main__":
    Test().ordinary_method()

报错如下:

Traceback (most recent call last):
File “/usercode/file.py”, line 8, in
Test().ordinary_method()
TypeError: ordinary_method() takes 0 positional arguments but 1 was given

1、类在调用普通方法时,会自动传一个代表自身对象的参数,而如果定义方法时没有声明此参数,则会出现上述错误。
2、理论上该参数可以用任一变量(有特殊作用的除外)表示,但是为了表意明确,统一用self代表类的对象本身。

2、使用类直接调用

class Test():
    def ordinary_method(self):
        print("This is ordinary-method")
        
if __name__=="__main__":
    Test.ordinary_method()

报错如下:

Traceback (most recent call last):
File “/usercode/file.py”, line 8, in
Test.ordinary_method()
TypeError: ordinary_method() missing 1 required positional argument: ‘self’

二、@classmethod和@staticmethod

先看一段代码:

class Test():
    @classmethod
    def class_method(cls):
        print("This is class-method")
        
    @staticmethod
    def static_method():
        print("This is static-method")
        
if __name__=="__main__":
    print("-"*100)
    Test().class_method()
    Test.class_method()
    print("-"*100)
    Test().static_method()
    Test.static_method()
    print("-"*100)

输出如下:

----------------------------------------------------------------------------------------------------
This is class-method
This is class-method
----------------------------------------------------------------------------------------------------
This is static-method
This is static-method
----------------------------------------------------------------------------------------------------

根据以上情况,简单总结下类方法和静态方法的异同:
相同点:

  • 都可以被类直接调用;
  • 都可以被类的对象调用。

不同点:

  • 类方法需要传一个代表类本身的变量cls,静态方法不用;
  • 类方法可以通过cls获取类本身的属性(变量和方法),静态方法只能显式传入。

初步总结,以后继续补充~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值