第15课 python 静态方法(Static Method)、类方法(Class Method)、实例方法(Instance Method)

在Python类中,静态方法、类方法和实例方法有着不同的特点与用途,以下为你详细介绍:

实例方法(Instance Method)

  • 定义与语法
    实例方法是类中最常见的方法类型,第一个参数通常命名为self(当然也可以用其他符合Python命名规范的名称,但习惯用self),这个self代表的是类的实例对象本身。通过实例对象去调用该方法时,Python会自动将实例对象作为第一个参数传入。例如:
  • class MyClass:
        def instance_method(self):
            print(f"这是一个实例方法,调用它的实例对象是 {
         self}")
    
  • 调用方式
    需要先创建类的实例,然后通过实例来调用实例方法,如下:
  • obj = MyClass()
    obj.instance_method()
    
  • 作用
    主要用于操作实例对象的属性、实现与实例相关的特定行为,不同的实例调用同一个实例方法时,由于各自实例属性值不同等原因,方法执行结果往往不同,比如在一个Person类中,instance_method可以用于获取某个人实例的年龄、姓名等具体信息。
  • 类方法(Class Method)

  • 定义与语法
    类方法使用@classmethod装饰器来定义,按照惯例,第一个参数通常命名为cls(同样也可换其他合法名称,但一般用cls),这个cls代表的是类本身,而不是类的实例。例如:
  • class MyClass:
        class_variable = 0
    
        @classmethod
        def class_method(cls):
            print(f"这是一个类方法,当前类是 {
         cls}")
    
  • 调用方式
    既可以通过类名直接调用,也可以通过类的实例对象调用,不过通常建议通过类名调用,如下:
  • MyClass.class_method()
    obj = MyClass()
    obj.class_method()
    
  • 作用
    常用于修改类的状态,比如修改类属性的值,或者创建基于类状态的新实例等情况。例如在一个Student类中,可以通过类方法来修改学生类总的人数统计属性,或者根据类中已有的一些默认设置来创建新的学生实例。
  • 静态方法(Static Method)

  • 定义与语法
    使用@staticmethod装饰器来定义静态方法,它不需要像实例方法那样有代表实例的self参数,也不需要像类方法那样有代表类的cls参数,它更像是一个普通的函数,只是被放在类的命名空间内而已。例如:
  • class MyClass:
        @staticmethod
        def static_method():
            print("这是一个静态方法")
    
  • 调用方式
    同样既可以通过类名调用,也可以通过实例对象调用,不过通常也是更倾向于用类名调用,如下:
  • MyClass.static_method()
    obj = MyClass()
    obj.static_method()
    
  • 作用
    静态方法一般用于实现一些与类的实例或者类的状态关联性不大,但逻辑上又适合放在类这个命名空间内的功能,比如一些工具性的函数,像在一个MathUtils类里,可以有静态方法用于判断一个数是否是质数,或者计算两个数的最大公约数等,这些操作不依赖于具体的实例或者类的属性变化。
  • 总的来说,实例方法侧重于操作实例相关内容,类方法主要围绕类本身的操作和状态改变,静态方法则提供类内相对独立的工具性或功能性逻辑。

    以下是 10 个案例,帮助你学习 Python 类中的静态方法、类方法和实例方法:

    案例一:学生信息管理

    class Student:
        school_name = "ABC School"
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def get_student_info(self):
            # 实例方法,访问实例属性
            return f"学生姓名:{
         self.name},年龄:{
         self.age}"
    
        @classmethod
        def change_school_name(cls, new_name):
            # 类方法,修改类属性
            cls.school_name = new_name
    
        @staticmethod
        def is_adult(age):
            # 静态方法,判断是否成年
            return age >= 18
    
    
    student1 = Student("小明", 16)
    print(student1.get_student_info())
    Student.change_school_name("XYZ School")
    print(Student.school_name)
    print(Student.is_adult(20))
    

    在这个案例中,get_student_info是实例方法,通过实例对象调用获取学生具体信息;change_school_name是类方法,用于修改类级别的属性;is_adult是静态方法,可根据传入年龄判断是否成年,无需实例或类的特定状态。

    案例二:图形类

    class Shape:
        @staticmethod
        def calculate_area(length, width

    作者:结伴同行~

    物联沃分享整理
    物联沃-IOTWORD物联网 » 第15课 python 静态方法(Static Method)、类方法(Class Method)、实例方法(Instance Method)

    发表回复