Python基础篇(15):类方法、实例方法和静态方法

一、类方法

1、类方法的定义

  • 使用 @classmethod 进行修饰
  • 方法中第一个形参是cls
class People:
    @classmethod
    def func_name(cls, params):
        pass

2、类方法的调用

  • “类名.方法名”
  • “对象.方法名”
class Student:
    # 定义类属性
    n = 20

    def __init__(self, name):
        # 定义实例属性
        self.name = name

    @classmethod
    def s_info(cls):
        print(cls.n)  # 类方法可以访问类属性
        print("call Student classmate")
        # print(self.name)   # 类方法不能访问实例属性


Student.s_info()  # 使用“类名.方法名”的方法来调用

stu = Student("张三")
stu.s_info()  # 使用“对象.方法名” 的方法来调用

二、实例方法

1、实例方法的定义

  • 中定义的 方法 默认都是实例方法
  • 第一个形参是self,不需要使用任何的修饰符修饰

2、实例方法的调用

  • 第一种是通过 “对象.方法名” 的方法来调用
  • 第二种是通过 “类名.方法名(对象, 参数列表)” 的形式来调用
class Student:
    # 定义类属性
    n = 20

    def __init__(self, name):
        # 定义实例属性
        self.name = name

    def s_info(self):
        print(self.n)  # 实例方法访问类属性
        print(self.name)   # 实例方法访问实例属性
        print("call Student instancemethod")


stu = Student("张三")

stu.s_info()  # 通过 “对象.方法名” 的方法来调用
Student.s_info(stu)  # 类名.方法名(对象, 参数列表)” 的形式来调用

三、类方法和实例方法区别

  1. 类方法第一个形参是cls,实例方法第一个形参是self
  2. 类方法调用不需要创建对象,实例方法调用必须要创建对象
  3. 类方法可以访问类中的类属性但不可以访问实例属性,访问类属性也是使用 “cls.” 的形式
  4. 实例方法可以访问类中的类属性和实例属性,使用 “self.” 的形式

四、静态方法

1、静态方法的定义

  • 静态方法的需要使用 @staticmethod 来修饰
  • 静态方法的 参数 没有任何的限制,可以没有任何参数,第一个参数也不必像 类方法实例方法 那样
class Student:
    @staticmethod
    def func_name(params):
        pass

2、静态方法的调用

  • “类名.方法名”
  • “对象.方法名”
class Student:
    @staticmethod
    def s_info():
        print("call Student staticmethod")


Student.s_info()  # “类名.方法名” 的方法来调用

stu = Student()
stu.s_info()   # “对象.方法名” 的方法来调用

3、静态方法的使用场景

    静态方法不能访问类属性与实例属性,所以静态方法使用场景如下:

  • 既不需要访问实例属性或者实例方法
  • 也不需要访问类属性或类方法
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的方法实例方法有什么区别? 方法通过装饰器@classmethod进行修饰,可以通过名或实例对象来调用。而实例方法属于方法型的函数,只能通过实例化后的对象来调用方法实例方法之间的功能差异在于调用方式和作用范围上也有所不同。方法有两种调用方式,一种是通过名来调用,另一种是通过实例化后的对象来调用。而静态方法也有两种调用方式,一种是通过名来调用,另一种是通过实例化后的对象来调用实例方法只能通过实例化后的对象来调用。 举个例子来说明: ```python class FunctionTest: fun = "test" def __init__(self): self.__name = "function" self.__age = 2 @classmethod def execute_class(cls): logging.info("this is class method!") @staticmethod def execute_static(x): logging.info("this is static method!") logging.info(f"{x} is a num.") def execute_normal(self): logging.info("This is normal method!") if __name__ == '__main__': # 实例调用 FT = FunctionTest() FT.execute_normal() # 实例调用 FT.execute_static(7) FT.execute_class() # 调用 FunctionTest.execute_static(9) FunctionTest.execute_class() ``` 在上面的例子中,`execute_class`是一个方法,可以通过名或实例化后的对象来调用。而`execute_static`是一个静态方法,也可以通过名或实例化后的对象来调用。而`execute_normal`是一个实例方法,只能通过实例化后的对象来调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值