Python入门之实例方法、类方法和静态方法的区别讲解

 更新时间:2023年10月08日 11:05:46   作者:Le0v1n  
这篇文章主要介绍了Python入门之实例方法、类方法和静态方法的区别讲解,实例方法是在创建了类的实例之后才能被调用的方法,类方法是在不需要创建类的实例的情况下就可以调用的方法,最后,静态方法是与类和类的实例都没有绑定关系的方法,需要的朋友可以参考下

1. 例子

class Dog:
    # 定义类变量(类属性)
    dogbook = {"黄色": 30, "黑色": 20, "白色": 0}
    def __init__(self, name, color, weight) -> None:
        self.name = name
        self.color = color
        self.weight = weight
        if self.color in self.dogbook:
            self.dogbook[self.color] += 1
        else:
            self.dogbook[self.color] = 1
    # 定义实例方法(定义时,必须把self作为第一个参数),该方法可以访问实例变量(属性)。调用时必须通过实例名来调用,不能通过类名来调用
    def bark(self):
        print(f"{self.name} is barking!")
    # 定义类方法(定义时,必须把cls作为第一个参数)。该方法可以访问类变量(属性),可以通过实例名来调用,也可以通过类名来调用
    @classmethod
    def dog_num(cls):
        num = 0
        for val in cls.dogbook.values():
            num += val
        return num
    """
        定义静态方法(定义式,不需要把self和cls作为第一个参数)。静态方法就是普通的函数,它对类和实例都一无所知。
        不能访问类变量,也不能访问实例变量。可以通过实例名来调用,也可以通过类名来调用
        静态方法写在类外面也是可以的,写在类里面只是因为这个函数和类有一定的关系,逻辑上更加易懂!
    """
    @staticmethod
    def total_weights(形参):
        total = 0
        for val in 形参:
            total += val.weight
        return total
if __name__ == "__main__":
    print(f"共有 {Dog.dog_num()} 条狗")
    dog_1 = Dog(name="大黄", color="黄色", weight=10)
    dog_1.bark()
    print(f"共有 {Dog.dog_num()} 条狗")
    try:
        Dog.bark()
    except:
        print("不能通过类名调用实例方法!")
    dog_2 = Dog(name="旺财", color="灰色", weight=8)
    dog_2.bark()
    print(f"共有 {Dog.dog_num()} 条狗")
    print(f"狗的重量为: {Dog.total_weights(形参=[dog_1, dog_2])}")

运行结果:

共有 50 条狗
大黄 is barking!
共有 51 条狗
不能通过类名调用实例方法!
旺财 is barking!
共有 52 条狗
狗的重量为: 18

2. 说明

名称装饰器定义是否可以访问实例变量实例名调用类名调用
实例方法必须把self作为第一个参数×
类方法@classmethod必须把cls作为第一个参数
静态方法@staticmethod等价于普通函数×

3. 注意事项

  • 默认创建的方法都是实例方法
  • 类方法在创建时第一个参数必须是cls,不能缺省
  • 静态方法不可以传入self,会报错(因为静态方法本质上就是普通的函数,传入的self会被认为是一个形参)!

4. 总结

总的来说

  • 实例方法适用于需要类的每个实例共享的操作;
  • 类方法用于需要在不创建类实例的情况下执行操作的情况;
  • 而静态方法则适用于不需要访问类或实例的数据的情况。

要理解这三种方法的区别和何时使用它们,是Python类编程的基本技巧之一。

到此这篇关于Python入门之实例方法、类方法和静态方法的区别讲解的文章就介绍到这了,更多相关实例方法、类方法和静态方法区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django模板导入母版继承和自定义返回Html片段过程解析

    Django模板导入母版继承和自定义返回Html片段过程解析

    这篇文章主要介绍了Django模板导入母版继承和自定义返回Html片段过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • python tkinter基本属性详解

    python tkinter基本属性详解

    这篇文章主要介绍了python tkinter基本属性详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python连接mysql数据库的正确姿势

    Python连接mysql数据库的正确姿势

    这篇文章主要为大家详细介绍了Python连接mysql数据库的正确姿势,如何使用Python连接mysql数据库,本文为大家揭晓,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Python中使用Opencv开发停车位计数器功能

    Python中使用Opencv开发停车位计数器功能

    这篇文章主要介绍了Python中使用Opencv开发停车位计数器,本教程最好的一点就是我们将使用基本的图像处理技术来解决这个问题,没有使用机器学习、深度学习进行训练来识别,感兴趣的朋友跟随小编一起看看吧
    2022-04-04
  • pytorch加载自定义网络权重的实现

    pytorch加载自定义网络权重的实现

    今天小编就为大家分享一篇pytorch加载自定义网络权重的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python encode()方法和decode()方法详解

    Python encode()方法和decode()方法详解

    encode() 方法为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也称为“编码”,这篇文章主要介绍了Python encode()方法和decode()方法,需要的朋友可以参考下
    2022-12-12
  • selenium+python自动化78-autoit参数化与批量上传功能的实现

    selenium+python自动化78-autoit参数化与批量上传功能的实现

    这篇文章主要介绍了selenium+python自动化78-autoit参数化与批量上传,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • python批量实现Word文件转换为PDF文件

    python批量实现Word文件转换为PDF文件

    这篇文章主要为大家详细介绍了python批量实现Word文件转换为PDF文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python简单实现AES加密和解密

    python简单实现AES加密和解密

    这篇文章主要为大家详细介绍了python简单实现AES加密和解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Python生成随机数组的方法小结

    Python生成随机数组的方法小结

    这篇文章主要介绍了Python生成随机数组的方法,结合实例形式总结分析了Python使用random模块生成随机数与数组操作相关技巧,需要的朋友可以参考下
    2017-04-04

最新评论