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

相关文章

  • 探究Python的Tornado框架对子域名和泛域名的支持

    探究Python的Tornado框架对子域名和泛域名的支持

    这篇文章主要介绍了探究Python的Tornado框架对子域名和泛域名的支持,Tornado作为一个典型的异步框架、在Python开发者中的人气相当高,需要的朋友可以参考下
    2015-05-05
  • Python Selenium弹窗处理操作指南

    Python Selenium弹窗处理操作指南

    我们做项目经常会遇到弹出框,下面这篇文章主要给大家介绍了关于Python Selenium弹窗处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • python 实现多线程下载视频的代码

    python 实现多线程下载视频的代码

    这篇文章主要介绍了python 实现多线程下载视频的代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 对tensorflow中的strides参数使用详解

    对tensorflow中的strides参数使用详解

    今天小编就为大家分享一篇对tensorflow中的strides参数使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python中的Numpy矩阵操作

    Python中的Numpy矩阵操作

    这篇文章主要介绍了Python中的Numpy矩阵操作,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Python实现

    Python实现"验证回文串"的几种方法

    这篇文章主要介绍了Python实现"验证回文串"的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python Flask-Login实现用户会话管理

    Python Flask-Login实现用户会话管理

    这篇文章主要介绍了Python Flask-Login实现用户会话管理过程,Flask-Login为Flask提供用户会话管理。它处理登录、注销和长时间记住用户会话等常见任务
    2022-12-12
  • pandas的resample重采样的使用

    pandas的resample重采样的使用

    这篇文章主要介绍了pandas的resample重采样的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • python中f‘{}‘用法小结

    python中f‘{}‘用法小结

    这篇文章主要介绍了python中f‘{}‘用法,f’{}’用法等同于 format用法的简单使用,更加方便,本文给大家详细讲解,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • python入门turtle库实现螺旋曲线图的方法示例

    python入门turtle库实现螺旋曲线图的方法示例

    turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制,本文就来介绍了一下python入门turtle库实现螺旋曲线图的方法示例,感兴趣的可以了解一下
    2021-11-11

最新评论