Python的实例、类方法和静态方法

前言

在Python的类中,我们可以提供三种不同类型的方法来实现我们的功能,分别是实例方法、方法和静态方法。不同类型的方法有着不同的实现和功能,也有不同的使用场景,在面试中也会经常被问到,接下来我们一起来聊一下这三者的细节。

实例方法

实例方法是 Python 类中最常见的方法类型。它们作用于类的实例,并通过 self 参数访问实例的属性和其他方法。实例方法在定义时不需要任何特殊的装饰器。

代码示例

class Person:
    def __init__(self,name,age,sex,addr):
        self.name = name
        self.age = age
        self.sex = sex
        self.address = addr
        
    def display(self):
        return f'{self.name}:年龄{self.age},性别{self.sex},住址{self.address}'

在上面示例中,display() 方法就是一个实例方法,它使用self参数访问实例的属性,这里多说一句,__init__()函数是实例的初始化函数,并不是类的构造函数,在__init__()中使用了self,说明对象在调用__init__()之前,已经被构造了,真正的构造函数什么?你知道吗?

类方法

类方法使用 @classmethod 装饰器标记,并作用于类本身,而不是类的实例。类方法的第一个参数是 cls,而不是 self,允许它们修改类的状态或执行与类相关的操作。,就是说类方法可以访问和修改类级别的属性和方法,而不是实例级别的

代码示例


class Circle:
   pi = 3.14
   
   def __init__(self,radius):
       self.radius = radius
       
   @classmethod
   def from_diameter(cls,diameter):
       return cls(diameter/2)
   
   def area(self):
       return self.pi * self.radius**2
   
if __name__ == '__main__':
   circle = Circle.from_diameter(20)
   print(circle.area()) # 314.0
   print(circle.radius) # 10.0
  • cls参数是类本身的引用,通过它可以访问和修改类级别的数据。

在上面的代码中,我们在from_diameter,调用了cls,构造了一个示例对象,上面我提到过类的构造函数,在Python类中,真正构造函数是__new__,这就是一个类函数,在实例方法中第一个参数self,就是__new__中返回的实例对象。

静态方法

静态方法使用 @staticmethod 装饰器定义,它们不作用于实例或类的状态。它们类似于普通函数,但在类的范围内定义,以便组织和管理,可以说是使用类管理的一个函数集合.

代码示例

class Utils:
    def add(x,y):
        return x+y
    
    def multiply(x,y):
        return x*y
    
if __name__ == '__main__':
    num1 = Utils.add(1,2)
    num2 = Utils.multiply(3,4)

上面代码中,add和mutiply就是静态方法,他们并不依赖实例对象。

使用场景

  • 实例方法: 当需要操作实例对象,来实现功能,这也是我们使用最多的情况,几乎所有的Python项目中都会使用类和实例对象。
  • 类方法: 当需要修改类级别属性或执行与类本身相关的操作时使用。比如需要在构造对象前进行某些操作,你可以尝试在__new__方法中返回其他类实例对象看看什么效果
  • 静态方法:当方法不依赖于实例或类状态,并且作为类的实用函数时使用,比如我们构建一个项目工具类的方法合集。

总结

了解和正确使用 Python 中的静态方法、类方法和实例方法,可以编写更清晰、更有组织的代码,这些代码易于维护和扩展。每种方法类型都有其独特的用途,掌握何时使用每种方法类型有助于确保您的 Python 代码库保持高效和可扩展。
我们可能很少回去使用类方法,但了解类方法也有助于加深你对构造实例对象过程的了解,而且类方法也是Python面试中高频知识点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值