zoukankan      html  css  js  c++  java
  • Python 中的实例方法、类方法、静态方法的区别

    1、关于参数的区别

            实例方法:定义实例方法是最少有一个形参 ---> 实例对象,通常用 self

            类方法:定义类方法的时候最少有一个形参 ---> 类对象,通常用 cls

            静态方法:定义静态方法的时候可以不定义形参

    2、关于方法定义时候添加装饰器的区别

            实例方法:不需要添加装饰器

            类方法:需要添加装饰器 ----> @classmethod

            静态方法:需要添加装饰器 ---> @staticmethod

    3、调用:

            1.实例方法可以通过对象直接调用

            2.但是用类名调用的时候,需要创建一个对象,并且在传递参数的时候要将对象传递进去

            3.类方法可以通过类名直接调用,也可以通过对象来调用

            4.静态方法可以通过类名直接调用,也可以通过对象来调用

    4、补充

      1.静态方法不可以继承  

      2.类方法不能访问实例变量,只能访问类变量

    class Dog():
    
        age = 3     # 类变量
        def __init__(self):
            self.name = "XiaoBai"   # 实例变量
    
        def run(self):      # 实例方法
            print("{} years old's {} is running!".format(self.age,self.name))
    
        @classmethod
        def eat(cls):
            # print(cls.name)       # 类方法,不能访问实例变量(属性)
            print("XiaoHei is {} years old".format(cls.age))    # 类方法只能访问类变量
    
        @staticmethod
        def sleep(name):
            # 静态方法与类无关,只能类中的一个功能而已
            # 静态方法不能访问类变量和实例变量
            print("{} is sleeping".format(name))
    
    d = Dog()
    d.run()     # 通过实例化对象调用实例方法
    Dog.run(d)  # 通过类名称调用实例方法,需要在方法中传入实例对象
    d.eat()     # 通过实例化对象调用类方法
    Dog.eat()   # 通过类名称调用类方法
    d.sleep("XiaoLan")   # 通过实例化对象调用静态方法
    Dog.sleep("XiaoLan") # 通过类名称调用静态方法
    作者:多测师高级讲师_郑sir
    微信:ZhengYing8887
    出处:https://www.cnblogs.com/ZhengYing0813/
    备注:本文版权归作者所有,欢迎转载和添加作者微信探讨技术,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    集合-ArrayList 源码解析
    >>《配色设计原理.pdf》
    >>《[美国视觉设计学院用书:完成设计(从理论到实践)].(萨马拉).温迪等.扫描版.pdf》
    《Photoshop智能手机APP界面设计.pdf》
    《贴心设计:打造高可用性的移动产品》——5.平板电脑和电子书阅读器
    3H Buy a Ticket —— Dij
    最短路板子
    3E A Simple Problem —— 数论
    3D 城池攻占 —— 左偏树
    3A Least Cost Bracket Sequence —— 贪心
  • 原文地址:https://www.cnblogs.com/ZhengYing0813/p/13544340.html
Copyright © 2011-2022 走看看