1、实例方法

实例方法既可以调用静态方法也可以调用类方法。

# 定义一个类
class A(object):
# 类属性
count = 0 def __init__(self):
self.name = '孙悟空' # 实例方法
# 在类中定义,以self为第一个参数的方法都是实例方法
# 实例方法在调用时,Python会将调用对象作为self传入
# 实例方法可以通过实例和类去调用
# 当通过实例调用时,会自动将当前调用对象作为self传入
# 当通过类调用时,不会自动传递self,此时我们必须手动传递self
def test(self):
print('这是test方法~~~ ' , self) # 创建A类对象
a = A() # 通过对象调用test方法
a.test()
# 通过类直接调用test方法
# 需要手动传入一个对象
A.test(a)
# 所以# a.test() 等价于 A.test(a)

2、类方法

(1)类方法特点

  • 在类内部使用 @classmethod 来修饰的方法属于类方法。
  • 对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数,就是class的简写。

(2)类方法使用场景

  • 当方法中 需要使用类对象 (如访问私有类属性等)时,定义类方法。
  • 类方法一般和类属性配合使用。
# 定义一个类
class A(object):
# 类属性
count = 0
__age = 18 def __init__(self):
self.name = '孙悟空' # 实例方法
# 在类中定义,以self为第一个参数的方法都是实例方法
# 实例方法在调用时,Python会将调用对象作为self传入
# 实例方法可以通过实例和类去调用
# 当通过实例调用时,会自动将当前调用对象作为self传入
# 当通过类调用时,不会自动传递self,此时我们必须手动传递self
def test(self):
print('这是test方法~~~ ', self) # 类方法
# 在类内部使用 @classmethod 来修饰的方法属于类方法
# 类方法的第一个参数是cls,也会被自动传递,cls就是当前的类对象
# 类方法和实例方法的区别,实例方法的第一个参数是self,而类方法的第一个参数是cls
# 类方法可以通过类去调用,也可以通过实例调用,没有区别
@classmethod
def test_2(cls):
# cls就是当前所在类的类对象
print('这是test_2方法,他是一个类方法~~~ ', cls)
# 可以通过cls直接调用类中的类属性
print(cls.count)
return cls.__age # 创建A类对象
a = A() # 通过对象调用test_2方法
a.test_2() # 通过类直接调用test_2方法
A.test_2()
# A.test_2() 等价于 a.test_2()

3、静态方法

(1)静态方法特点

  • 在类中使用@staticmethod来修饰的方法属于静态方法,静态方法既不需要传递类对象也不需要传递实例对象(形参没有self/cls,如果有需要,需要什么参数,就填写什么参数就可以。
  • 静态方法 也能够通过 实例对象类对象 去访问。

(2)静态方法使用场景

  • 当方法中 既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象 (如类属性、类方法、创建实例等)时,定义静态方法。
  • 取消不需要的参数传递,有利于 减少不必要的内存占用和性能消耗
# 定义一个类
class A(object):
# 类属性
count = 0 def __init__(self):
self.name = '孙悟空' # 实例方法
# 在类中定义,以self为第一个参数的方法都是实例方法
# 实例方法在调用时,Python会将调用对象作为self传入
# 实例方法可以通过实例和类去调用
# 当通过实例调用时,会自动将当前调用对象作为self传入
# 当通过类调用时,不会自动传递self,此时我们必须手动传递self
def test(self):
print('这是test方法~~~ ', self) # 类方法
# 在类内部使用 @classmethod 来修饰的方法属于类方法
# 类方法的第一个参数是cls,也会被自动传递,cls就是当前的类对象
# 类方法和实例方法的区别,实例方法的第一个参数是self,而类方法的第一个参数是cls
# 类方法可以通过类去调用,也可以通过实例调用,没有区别
@classmethod
def test_2(cls):
# cls就是当前所在类的类对象
print('这是test_2方法,他是一个类方法~~~ ', cls)
# 可以通过cls直接调用类中的类属性
print(cls.count) # 静态方法
# 在类中使用 @staticmethod 来修饰的方法属于静态方法
# 静态方法不需要指定任何的默认参数,
# 静态方法可以通过类和实例去调用。
# 静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
# 静态方法一般都是一些工具方法。
@staticmethod
def test_3():
print('test_3执行了~~~') # 创建A类对象
a = A() # 通过对象调用test_3方法
a.test_3() # 通过类直接调用test_3方法
A.test_3()
# A.test_3() 等价于 a.test_3() """
静态方法和函数的区别:
静态方法必须要用类对象或者实例对象来调用。
函数直接使用。
"""

『无为则无心』Python面向对象 — 58、类方法和静态方法的更多相关文章

  1. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

  2. 『无为则无心』Python面向对象 — 53、对Python中封装的介绍

    目录 1.继承的概念 2.继承的好处 3.继承体验 4.单继承 5.多继承 1.继承的概念 在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么 ...

  3. 『无为则无心』Python面向对象 — 45、面向对象编程

    目录 1.面向对象编程的概念 2.面向对象编程和面向过程编程的区别 (1)面向过程编程 (2)面向对象编程 3.举例理解面向对象 4.Python的面向对象编程 5.面向对象的几大核心特性 1.面向对 ...

  4. 『无为则无心』Python面向对象 — 46、类和对象

    目录 1.理解类和对象 2.类 3.对象 4.Python中的对象 5.类和对象的定义 (1)定义类 (2)创建对象 (3)练习 6.拓展:isinstance() 函数 1.理解类和对象 (1)类和 ...

  5. 『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)

    Python对于类的成员没有严格的访问控制限制,这与其他面向对象的编程语言是有所区别的. 关于私有方法其实和私有属性差不多,有如下要点: 1.通常我们约定,两个下划线开头的方法是私有方法. 2.类内部 ...

  6. 『无为则无心』Python面向对象 — 56、Python多态

    目录 1.Python中的多态 (1)多态的定义 (2)多态的好处 (3)多态实现步骤 2.体验多态 1.Python中的多态 (1)多态的定义 多态是一种使用对象的方式,子类重写父类方法,不同的子类 ...

  7. 『无为则无心』Python面向对象 — 47、Python中的self详解

    目录 1.self的作用 2.self的使用注意事项 (1)self代表类的实例,而非类 (2)self不必非写成self,只是一种规范. (3)类中方法的形参中一定要写self,包括内置函数 (4) ...

  8. 『无为则无心』Python面向对象 — 54、重写和super()函数

    目录 1.重写 2.super()函数 方式一 方式二 __mro__内置类属性说明 1.重写 在子类中如果有和父类同名的方法,则通过子类实例去调用该方法时,会调用子类中的该方法而不是父类的方法,这个 ...

  9. 『无为则无心』Python面向对象 — 55、多层继承和继承中的私有成员

    目录 1.Python支持多层继承 (1)多层继承实现 (2)多层继承和多重继承区别 2.继承中的私有成员 (1)继承中父类私有属性和私有方法 (2)获取和修改私有属性值 1.Python支持多层继承 ...

随机推荐

  1. dgv 自动换行

    //设置自动换行 dgv.DefaultCellStyle.WrapMode = DataGridViewTriState.True; //设置自动调整高度 dgv.AutoSizeRowsMode ...

  2. 【经验总结】CodeBlocks使用mingw64

    CodeBlocks使用 标签:c++ 一.安装并配置mingw-w64 使用中发现CB默认的编译器版本过低,c++11的一些东西无法使用,比如string中的stoi函数,因此尝试安装新版本的编译器 ...

  3. DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TORCH.AUTOGRAD

    torch.autograd 是PyTorch的自动微分引擎,用以推动神经网络训练.在本节,你将会对autograd如何帮助神经网络训练的概念有所理解. 背景 神经网络(NNs)是在输入数据上执行的嵌 ...

  4. 返回void-(响应ajax,响应json格式)(了解)

    将jquery库文件加入到idea中 引入json依赖 index.jsp中 设置按钮发起ajax请求 从处理器方法返回void,响应ajax请求 MyController中

  5. a 标签一些特殊用法

    发邮件 <a href="mailto:youemail@mail.com?subject=邮件标题&body=邮件内容">告诉我们</a> 打电话 ...

  6. 开发者的瑞士军刀「GitHub 热点速览 v.22.04」

    Swiss Army knife 可以说是本周的关键词了,多个项目采用该词来描述它的特性:像是能全方位解决浏览器"网络"操作的 CyberChef 方便你进行数据加密.解编码,还有 ...

  7. [JavaWeb]Log4j的前因后果

    Log4j的前因后果 简介 Log4j的进化史 Log4J的三大组件: Logger:日志记录器,负责收集处理日志记录 (如何处理日志) Appender:日志输出目的地,负责日志的输出 (输出到什么 ...

  8. 面向计算机视觉的深度学习 | iBooker&#183;ApacheCN

    原文:Deep Learning for Computer Vision 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生 ...

  9. js中全局变量和局部变量以及变量声明提升

    javascript中全局变量和局部变量的区别 转载前端小99 发布于2018-04-23 15:31:35 阅读数 2102  收藏 展开 [javascript] view plain copy ...

  10. 标签显示模式(display)

    非洲黑人: 皮肤内黑色素含量高,以吸收阳光中的紫外线,保护皮肤内部结构免遭损害,头发象羊毛一样卷曲,使每根卷发周围都有许多空隙,空隙充满空气,卷发有隔热作用. 欧洲白人: 生活寒带或着是说常年温度较低 ...