Python基础之类中的方法

一、类中方法的定义

1:实例方法:第一个参数必须是self,默认是绑定到对象的,归属于实例对象。

2:类方法:使用修饰符@classmethod定义,且第一个参数必须是cls,方法被绑定到了类,归属于类对象。

3:静态方法:使用修饰符@staticmethod定义,参数随意,没有self和cls,不和任何对象绑定,不属于任何对象。

class Func:
    def instance_func(self):
        print("这是实例方法")
        
    @classmethod
    def class_func(cls):
        print("这是类方法")
        
    @staticmethod
    def static_func():
        print("这是静态方法")
        
func = Func()
func.instance_func()   # 实例对象可以调用实例方法
func.class_func()      # 实例对象可以调用类方法
func.static_func()     # 实例对象可以调用静态方法

Func.instance_func()   # 报错,类对象不可以调用实例方法,实例方法只能由实例对象调用
Func.class_func()      # 类对象可以调用类方法
Func.static_func()     # 类对象可以调用静态方法

二、调用

实例方法:实例对象可以调用,会自动将实例对象当做第一个参数传给self,类不可以调用实例方法,调用后会报错。

类方法:实例对象和类都可以调用,类调用会自动将类对象当做第一个参数传给cls,实例对象调用的类方法,也是自动将类当做第一个参数传给cls。

静态方法:实例对象和类都可以调用,就是一个普通的函数,没有自动传值一说。无法访问类属性、实例属性,相当于一个独立的方法,跟类没啥关系,放在一个类的作用域里面的函数而已。

三、类方法的使用场景

类方法适用于方法中只涉及到类变量的方法。

class Car:
    max_speed = 100

    @classmethod
    def modify_speed(cls, speed):
        cls.max_speed = speed

    def __init__(self, brand, age):
        self.brand = brand
        self.age = age

    @staticmethod
    def print_message():
        # 语法错误,不可以在静态方法中使用实例属性和类属性
        print(f'这是{self.brand},车速是{cls.max_speed}')   
        print('这是辆汽车')

car1 = Car('宝马', 3)
car2 = Car('奥迪', 2)
print(car1.max_speed)    # 100
print(car2.max_speed)    # 100
Car.modify_speed(150)
print(car1.max_speed)    # 150
print(car2.max_speed)    # 150

总结三种方法的使用:若类中需要一个功能,该功能的实现代码中需要引用实例属性则将其定义成实例方法、需要引用类则将其定义成类方法、无需引用类或对象则将其定义成静态方法。

你可能感兴趣的:(Python基础,python,开发语言)