美文网首页Python测试
Python 类方法、实例方法、静态方法区别与联系

Python 类方法、实例方法、静态方法区别与联系

作者: 北京硕爷 | 来源:发表于2020-05-12 21:12 被阅读0次

    作者:夕夕石(硕爷)


    一、表格直观展示区别

    -- 实例调用 类调用 访问实例属性 访问类属性
    实例方法
    类方法
    静态方法

    二、逐个介绍

    1、实例方法/对象方法

    实例方法或者叫对象方法,指的是我们在类中定义的普通方法。

    只有实例化对象之后才可以使用的方法,该方法的第一个形参接收的一定是对象本身

    class Person:
        def hello(self): # 实例方法
            print("hello")
    
    # 只能实例调用,不能类调用        
    p = Person() # 先要将类实例化。才能调用下面的实例方法
    p.hello()
    

    2、静态方法

    (1) 格式:在方法上面添加 @staticmethod

    (2) 参数:静态方法可以有参数也可以无参数

    (3) 应用场景:一般用于和类对象以及实例对象无关的代码。

    (4) 使用方式: 类名.类方法名(或者对象名.类方法名)。

    定义一个静态方法

    class Game:
     
      @staticmethod
      def menu(): # 静态方法,可以有参数,也可以没有参数
        print('------')
        print('开始[1]')
        print('暂停[2]')
        print('退出[3]')
     
    # 两种调用都支持 
    Game.menu() # 这是类调用
    Game().menu() # 这是实例调用
    

    3、类方法

    无需实例化,可以通过类直接调用的方法,但是方法的第一个参数接收的一定是类本身

    (1) 在方法上面添加@classmethod

    (2) 方法的参数为 cls 也可以是其他名称,但是一般默认为cls

    (3) cls 指向 类对象

    (4) 应用场景:当一个方法中只涉及到静态属性的时候可以使用类方法(类方法用来修改类属性)。

    (5) 使用:可以是 对象名.类方法名。或者是 类名.类方法名

    class Person:
      type = '人类'
     
      @classmethod
      def test(cls):
        print(cls.type)
     
    # 两种调用都支持 
    Person.test() # 这是类调用
    Person().test() # 这是实例调用
    
    

    三、举例

    class getMinNum():
        class_pro = "class_pro" # class_pro这是类属性
    
        def __init__(self, pro):
            self.instance_pro = pro # instance_pro这是实例属性
    
        def instance_fun(self): # instance_fun这是实例方法
            print(getMinNum.class_pro) # 实例方法可以访问类属性
            print(self.instance_pro) # 实例方法可以访问实例属性
    
        # 类方法应用场景:类方法用来修改类属性
        @classmethod
        def class_fun(cls): # class_fun这是类方法
            print(getMinNum.class_pro) # 类方法可以访问类属性
            # print(self.instance_pro) 报错 # 类方法不能访问实例属性
    
        # 静态方法应用场景:一般用于和类对象以及实例对象无关的代码
        @staticmethod
        def static_fun(): # static_fun这是静态方法(传不传参均可)
            print(getMinNum.class_pro) # 静态方法可以访问类属性
            # print(getMinNum.instance_pro) 报错 # 静态方法不能访问实例属性
    

    作者:夕夕石(硕爷)

    夕夕石微信

    相关文章

      网友评论

        本文标题:Python 类方法、实例方法、静态方法区别与联系

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