美文网首页
Python @staticmethod @classmetho

Python @staticmethod @classmetho

作者: Paycation | 来源:发表于2018-05-16 23:43 被阅读20次

    TL;DR

    Normal Method (class)

    class A:
        def show(self, s):
            print(self, s)
        def show_self(s):
            print(s)    
    
    a = A()        
    
    A.show(1, 2)
    A.show_self(3) 
    输出:
    1 2
    3
    

    传入什么就是什么,没有任何特别之处。就像一个普通的函数。

    Normal Method (instance)

    class A:
        def show(self, s):
            print(self, s)
        def show_self(s):
            print(s)    
    
    a = A()        
    
    a.show(1)
    a.show_self()
    输出:
    <__main__.A object at 0x1020e43c8> 1
    <__main__.A object at 0x1020e43c8>
    

    instance.method() 这种格式,默认第一个参数是 self (隐性参数),指代实例本身。所以即使括号无参数,也会输出实例本身。

    @classmethod

    class A:
        @classmethod
        def show(cls, s):
            print(cls, s)   
    
    a = A()        
    
    a.show(1)
    A.show(2)
    输出:
    <class '__main__.A'> 1
    <class '__main__.A'> 2
    

    类似于普通方法会把第一个参数变成 self 指代实例本身,classmethod 会把方法的第一个参数变成 cls 指代类本身。如果是用实例调用,则效果和用类一样。
    官方解释:A class method receives the class as implicit first argument, just like an instance method receives the instance.

    @staticmethod

    class A:
        @staticmethod
        def show(self, s):
            print(self, s)   
    
    a = A()        
    
    a.show(3, 4)
    A.show(1, 2)
    

    官方解释:A static method does not receive an implicit first argument. 说白了就是把方法变成彻底的普通方法,无论是类还是实例调用都不存在 self, cls 这种隐性参数。

    相关文章

      网友评论

          本文标题:Python @staticmethod @classmetho

          本文链接:https://www.haomeiwen.com/subject/vtxpdftx.html