python @staticmethod和@classmethod

系统 1648 0

ref @ https://blog.csdn.net/handsomekang/article/details/9615239

cls 参数和 self 参数

cls 当前个类
self 当前这个类的实例

@staticmethod @ classmethod

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。

而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。

这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢

从它们的使用上来看,

  • @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
  • @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
            
              
                class
              
              
                A
              
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
    bar 
              
                =
              
              
                1
              
              
                def
              
              
                foo
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                print
              
              
                'foo'
              
              
 
    @
              
                staticmethod
              
              
                def
              
              
                static_foo
              
              
                (
              
              
                )
              
              
                :
              
              
                print
              
              
                'static_foo'
              
              
                print
              
               A
              
                .
              
              bar
 
    @
              
                classmethod
              
              
                def
              
              
                class_foo
              
              
                (
              
              cls
              
                )
              
              
                :
              
              
                print
              
              
                'class_foo'
              
              
                print
              
               cls
              
                .
              
              bar
        cls
              
                (
              
              
                )
              
              
                .
              
              foo
              
                (
              
              
                )
              
              
 
A
              
                .
              
              static_foo
              
                (
              
              
                )
              
              
A
              
                .
              
              class_foo
              
                (
              
              
                )
              
            
          
  • 为什么static_foo里面少了一行(没有调用A类的foo函数 ,这是因为没有foo的实例)
    • cls() 创建了这个类的一个临时实例
    • cls就可以当作这个类的别名用

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论