1. 程式人生 > 其它 >面向物件-物件方法/靜態方法/類方法

面向物件-物件方法/靜態方法/類方法

物件方法/靜態方法/類方法

1、物件方法

  • 定義

    定義在類中

  • 呼叫方式

    通過物件進行呼叫

  • 呼叫格式

    物件.方法名([引數])

  • 特性

    在物件內部以引用的方式 使用類的屬性和方法

  • self

    self為當前呼叫它的那個物件 也就是說 誰呼叫的它 則self就是誰

2、靜態方法

  • 定義

    定義在類中

  • 格式

    @staticmethod

  • 呼叫方式

    使用類名/物件進行呼叫

  • 呼叫格式

    類名/物件.方法名([引數列表])

  • 特性

    無論使用類、還是物件去呼叫 都無法獲取內部的屬性和方法 完全獨立的一個方法

  • 例項

    class Test:
        def say(self):
            print('普通的物件方法')
    
        @staticmethod
        def speak(*args, **kwargs):
            print(args, kwargs)
            print('靜態方法@staticmethod')
    
    t = Test()
    # t.speak()
    Test.speak(1,2,3, name='lucky')
    

3、類方法

  • 定義

    定義在類中

  • 定義格式

    @classmethod

  • 呼叫方式

    類名/物件.方法名(建議使用類)

  • 呼叫格式

    類名.方法名([引數列表])

  • 特性

    在類方法內部可以引用類的屬性和方法

  • 注意

    定義函式的第一個引數 必須為cls 其餘引數按順序擺放即可 呼叫類方法的時候 忽略第一個引數cls

  • cls

    代表當前類名

  • 例項

    class Test:
        name = 'lucky'
    
        @classmethod
        def test(cls):
            print(cls)
            return cls()
    t = Test()
    # Test.test()
    # t.test()
    # print(Test)
    print(Test.test().name)
    

4、動態新增類方法

  • 概述

    新增類方法 就是將這個方法新增給類 因此 新增類方法的時候使用的是類, 而不是物件

  • 將方法直接賦值給類

  • 例項

    class Test:
        pass
    
    @classmethod
    def run(cls):
        print('大偉 is running...')
    
    Test.run = run
    Test.run()
    

5、動態新增靜態方法

  • 概述

    新增靜態方法 就是將這個方法新增給類 所以直接給類去新增的

    使用@staticmethod

  • 例項

    class Test:
        pass
    
    @staticmethod
    def test():
        print('靜態方法')
    
    Test.test = test
    Test.test()